Questions bash

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Bruno Tréguier
Le #21428391
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
denist
Le #21428491
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
Publicité
Poster une réponse
Anonyme