Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Questions bash

2 réponses
Avatar
denist
Bonjour

Je fais des scripts bash pour traiter des fichiers :

for i in /home/denis/*.avi; do
mencoder [...]
scp i denis@192.168.2.3:/var/media-center
done

Je souhaite placer ça dans une tâche cron. Ma question est de savoir
comment faire pour éviter de traiter les fichiers qui sont en cours
d'utilisation, de création ou même de transfert ? Est-ce que le système
verrouille les fichiers utilisés par un autre processus ? Les fichiers
arrivent dans /home/denis par scp via une autre tâche cron, mais lancée
sur depuis un autre poste et je ne voudrais pas qu'ils soient traités
tant que le transfert n'est pas fini. Merci de vos conseils

2 réponses

Avatar
Bruno Tréguier
Le 23/03/2010 à 20:46, denist a écrit :
Bonjour



Bonsoir,

Je fais des scripts bash pour traiter des fichiers :

for i in /home/denis/*.avi; do
mencoder [...]
scp i :/var/media-center
done

Je souhaite placer ça dans une tâche cron. Ma question est de savoir
comment faire pour éviter de traiter les fichiers qui sont en cours
d'utilisation, de création ou même de transfert ? Est-ce que le système
verrouille les fichiers utilisés par un autre processus ?



Non. C'est à vous de prévoir vos verrouillages. En shell, si vous êtes
sous Linux, vous pouvez le faire par exemple avec flock(1).

Quand vous parlez d'utilisation, de quoi s'agit-il ? Il n'y a aucun
problème à commencer à transcoder un fichier s'il n'est, par ailleurs,
accédé qu'en lecture (ça fera juste 2 lectures simultanées)...


Les fichiers
arrivent dans /home/denis par scp via une autre tâche cron, mais lancée
sur depuis un autre poste et je ne voudrais pas qu'ils soient traités
tant que le transfert n'est pas fini. Merci de vos conseils



Le plus simple, à mon avis, est de transférer vos fichiers avec un autre
suffixe (genre ".avi.part"), et de les renommer (via un ssh consécutif à
votre scp) une fois qu'ils ont été complètement téléchargés. Là au
moins, vous êtes sûr que vous ne commencerez à encoder que des fichiers
complets.

Cordialement,

Bruno
Avatar
denist
Le Tue, 23 Mar 2010 22:07:57 +0100, Bruno Tréguier a écrit :

Le 23/03/2010 à 20:46, denist a écrit :
Bonjour



Bonsoir,

Je fais des scripts bash pour traiter des fichiers :

for i in /home/denis/*.avi; do
mencoder [...]
scp i :/var/media-center done

Je souhaite placer ça dans une tâche cron. Ma question est de savoir
comment faire pour éviter de traiter les fichiers qui sont en cours
d'utilisation, de création ou même de transfert ? Est-ce que le système
verrouille les fichiers utilisés par un autre processus ?



Non. C'est à vous de prévoir vos verrouillages. En shell, si vous êtes
sous Linux, vous pouvez le faire par exemple avec flock(1).

Quand vous parlez d'utilisation, de quoi s'agit-il ? Il n'y a aucun
problème à commencer à transcoder un fichier s'il n'est, par ailleurs,
accédé qu'en lecture (ça fera juste 2 lectures simultanées)...




En fait je crains que le fichier ne soit pas lisible par le script, par
exemple si le transfert a démarré quasi simultanément que la tache cron,
et il n'y a pas que des commandes mencoder (c'était pour l'exemple), les
fichiers sont déplacés, renommés, screencap etc.


Les fichiers
arrivent dans /home/denis par scp via une autre tâche cron, mais lancée
sur depuis un autre poste et je ne voudrais pas qu'ils soient traités
tant que le transfert n'est pas fini. Merci de vos conseils



Le plus simple, à mon avis, est de transférer vos fichiers avec un autre
suffixe (genre ".avi.part"), et de les renommer (via un ssh consécutif à
votre scp) une fois qu'ils ont été complètement téléchargés. Là au
moins, vous êtes sûr que vous ne commencerez à encoder que des fichiers
complets.



Oui je n'y avais pas pensé. mais je me demande si le même problème ne
peut pas se reproduire pendant le mv du .part vers .avi ? J'imagine que
je chipote et je ne sais pas comment mv se comporte à ce niveau.

Au sujet de flock, d'après vous quand-est ce que je devrais l'appliquer
je me mélange un peu j'ai lu le man mais...:
flock /tmp/lockfile -c scp i :/var/media-center ?
aurait j'imagine pour conséquence de verrouiller le fichier sur le pc
source, mais comment le verrouiller aussi sur le pc distant ? Je n'ai pas
trouvé beaucoup d'exemple.

En tous cas je vais appliquer un renommage, ça réduira beaucoup les
risques. Merci.


Cordialement,

Bruno