Question Arrêter le travail Cron pour un intervalle de temps particulier


J'ai un travail cron qui se déroule toutes les cinq minutes toute la journée.

Je veux interrompre ce travail cron le dimanche entre 16h et 17h - il devrait recommencer après cette heure.

Comment puis-je écrire ce script?


4
2017-07-07 12:14


origine




Réponses:


Collez ceci en haut de votre script cron (modifié selon vos besoins) ...

if [[ $(date +%u) -eq 7 && $(date +%H) -eq 16 ]]; then
  echo "I don't run at this time"
  exit 1
fi
echo "Something to do at other times here..."

La première instance de "date" renvoie le jour de la semaine (dimanche = 7), la seconde renvoie l'heure (16 = 16h - 16h59). Si le script trouve qu'il est actuellement le jour 7 et l'heure 16, il sortira.


4
2017-07-07 12:51



Vous pouvez ensuite condenser la vérification en une seule commande de date si vous le souhaitez, si [$ (date + '% u:% H') = "7:16"]; - Darren Hall


Qu'en est-il de:

*/5 * * * * job.sh > /dev/null

00 16 * * 0 touch /tmp/stopJob.lck
00 17 * * 0 rm -f /tmp/stopJob.lck

Dans job.sh quitte juste si le fichier existe:

if [ -f /tmp/stopJob.lck ] 
then 
  exit
fi

4
2017-07-07 12:56



Il y a juste un léger risque que si la commande rm n'est pas exécutée pour une raison quelconque (serveur redémarré juste avant 17h00, correction de l'heure NTL, etc.), le script principal sera ignoré pendant une semaine. De même, si le toucher est ignoré, le script principal sera exécuté lorsqu'il ne devrait pas - Linker3000
Oui c'est vrai. Pour cette approche Linker3000s est plus stable. Ma solution est plus explicite en regardant dans la crontab. - DaSteph


Vous n'avez peut-être pas besoin de beaucoup si votre travail cron exécute un script et vous pouvez le faire vérifier absence d'un processus mis en place pour fonctionner entre 16 heures et 17 heures le dimanche

Par exemple, j'utilise un job cron toutes les 15 minutes qui appelle rsync mais seulement si rsync n'est pas déjà en cours d'exécution.

Il utilise le pidof commande pour vérifier si un identifiant de processus particulier est en cours d'exécution:

PID=$(pidof rsync)

if [ -z $PID ]
then 
    rsync -avz ....
fi

Vous devrez élaborer les détails de votre situation particulière. Je le présente maintenant comme une idée à réfléchir.


0
2017-07-07 12:43