jeudi 9 février 2012

Multiple executions de taches cron...

Lorsque que tu lances une tache cron, elle est susceptible de prendre du temps. Il est donc possible que le processus en question se relance avant la premiere instance soit terminée. Une execution multiple de processus peut avoir des consequences plus ou moins graves (corruption de fichiers, corruption de bases de donnees, monté en charge du systeme, ...).

Pour cela je vais te donner quelques astuces qui te permettront de parer à ce désagrément.

- 1ere astuce (dans le code...) :
le but du jeu est protegé le script de l'execution multiple via un fichier "sémaphore".

debut du script :
#!/bin/bash
if [ -f /var/run/$0.pid ] ; then
echo "Une autre instance tourne" >> /var/log/$0.log
exit 1
fi

touch /var/run/$0.pid

if [ $? -ne 0 ] ; then
echo "impossible de cree le fichier /var/run/$0.pid" >> /var/log/$0.log
exit 2
fi

# ton code ici
fin du script :
rm -f /var/run.$0.pid
exit 0
cette methode a le merite de pouvoir controler les multiples executions de ton script meme quand tu n'as pas acces au crontab de la machine.

- 2eme actuce (dans la ligne du crontab) :
[ $(pgrep -c "ton_script") -eq 0 ] && "execution_de_ton_script" || : cette derniere methode a le merite de pouvoir etre plus souple et d'autoriser et / ou de controler l'execution multiple.

exemple :
*/10 * * * * [ $(pgrep -c "ton_script") -lt 5 ] && "execution_de_ton_script" || : ce script se lancera toutes les 10 minutes dans la limite de 5 instances du processus courant...

En espérant que ce post te seras d'un utilité quelconque ou t'auras appris quelque nouvelle astuce pour bien gérer ta machine.