GNU/Linux >> Linux Esercitazione >  >> Linux

Esegui cron job solo se non è già in esecuzione

Usa flock . È nuovo. È meglio.

Ora non devi scrivere tu stesso il codice. Scopri altri motivi qui:https://serverfault.com/a/82863

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

Lo faccio per un programma di spooler di stampa che ho scritto, è solo uno script di 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

Funziona ogni due minuti ed è abbastanza efficace. Ho ricevuto un'e-mail con informazioni speciali se per qualche motivo il processo non è in esecuzione.


Come altri hanno affermato, scrivere e controllare un file PID è una buona soluzione. Ecco la mia implementazione 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. Aggiunta di una riga a un file solo se non esiste già

  2. Eseguire un cron job su Linux ogni sei ore

  3. Come configurare il lavoro CRON per l'esecuzione ogni 10 secondi in Linux?

  4. cron job occasionalmente non in esecuzione

  5. Come configurare cron job per l'esecuzione ogni 2 giorni alle 23:00

Come eseguire un processo cron in giorni specifici della settimana

Come impostare ed eseguire un cron in cPanel

Come posso ottenere un cron job da eseguire ogni 30 minuti?

cron job da eseguire nell'ambiente virtuale conda

come eseguire cron job ogni 3 mesi?

Non eseguire cron job se già in esecuzione