GNU/Linux >> Tutoriels Linux >  >> Linux

Exécutez la tâche cron uniquement si elle n'est pas déjà en cours d'exécution

Utilisez flock . C'est nouveau. C'est mieux.

Maintenant, vous n'avez pas à écrire le code vous-même. Découvrez plus de raisons ici :https://serverfault.com/a/82863

/usr/bin/flock -n /tmp/my.lockfile /usr/local/bin/my_script

Je le fais pour un programme de spouleur d'impression que j'ai écrit, c'est juste un script shell :

#!/bin/sh
if ps -ef | grep -v grep | grep doctype.php ; then
        exit 0
else
        /home/user/bin/doctype.php >> /home/user/bin/spooler.log &
        #mailing program
        /home/user/bin/simplemail.php "Print spooler was not running...  Restarted." 
        exit 0
fi

Il fonctionne toutes les deux minutes et est assez efficace. Je l'ai envoyé par e-mail avec des informations spéciales si, pour une raison quelconque, le processus ne s'exécute pas.


Comme d'autres l'ont dit, écrire et vérifier un fichier PID est une bonne solution. Voici mon implémentation bash :

#!/bin/bash

mkdir -p "$HOME/tmp"
PIDFILE="$HOME/tmp/myprogram.pid"

if [ -e "${PIDFILE}" ] && (ps -u $(whoami) -opid= |
                           grep -P "^\s*$(cat ${PIDFILE})$" &> /dev/null); then
  echo "Already running."
  exit 99
fi

/path/to/myprogram > $HOME/tmp/myprogram.log &

echo $! > "${PIDFILE}"
chmod 644 "${PIDFILE}"

Linux
  1. Comment mettre en place une tâche cron pour lancer un exécutable toutes les heures ?

  2. Linux :exécuter la tâche cron au premier plan

  3. Comment configurer le travail CRON pour qu'il s'exécute toutes les 10 secondes sous Linux ?

  4. tâche cron à exécuter sous l'environnement virtuel conda

  5. comment exécuter le travail cron tous les 3 mois?

Cron Job pour vérifier si le script Php est en cours d'exécution, sinon, exécutez-le ?

Comment exécuter une tâche cron certains jours de la semaine

Comment configurer et exécuter un Cron dans cPanel

Comment puis-je exécuter une tâche cron toutes les 30 minutes ?

Comment afficher une tâche cron en cours d'exécution ?

la tâche cron ne s'exécute parfois pas