129 votes

Empêcher l'exécution de tâches cron en double

J'ai programmé une tâche cron pour qu'elle s'exécute toutes les minutes, mais parfois le script prend plus d'une minute pour se terminer et je ne veux pas que les tâches commencent à "s'empiler" les unes sur les autres. Je suppose que c'est un problème de concurrence - c'est-à-dire que l'exécution de script doit être mutuellement exclusive.

Pour résoudre le problème, j'ai fait en sorte que le script recherche l'existence d'un fichier particulier (" fichier de verrouillage.txt ") et quitter s'il existe ou touch si ce n'est pas le cas. Mais ce n'est pas un bon sémaphore ! Existe-t-il une meilleure pratique que je devrais connaître ? Aurais-je dû écrire un démon à la place ?

0voto

user__42 Points 101

@Philip La réponse de Reynolds commencera à exécuter le code après le temps d'attente de 5s de toute façon sans obtenir le verrou. Suivant Flock ne semble pas fonctionner J'ai modifié la réponse de @Philip Reynolds à

(
  flock -w 5 -x 99 || exit 1
  ## Do your stuff here
) 99>/path/to/my.lock

afin que le code ne soit jamais exécuté simultanément. Au lieu de cela, après les 5 secondes d'attente, le processus sortira avec 1 s'il n'a pas obtenu le verrou à ce moment-là.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X