GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Führen Sie den Cron-Job nur aus, wenn er nicht bereits ausgeführt wird

Verwenden Sie flock . Es ist neu. Es ist besser.

Jetzt müssen Sie den Code nicht mehr selbst schreiben. Weitere Gründe finden Sie hier:https://serverfault.com/a/82863

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

Ich mache das für ein von mir geschriebenes Druckspooler-Programm, es ist nur ein Shell-Skript:

#!/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

Es läuft alle zwei Minuten und ist ziemlich effektiv. Ich habe eine E-Mail mit speziellen Informationen erhalten, wenn der Prozess aus irgendeinem Grund nicht ausgeführt wird.


Wie andere gesagt haben, ist das Schreiben und Überprüfen einer PID-Datei eine gute Lösung. Hier ist meine Bash-Implementierung:

#!/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. Cron-Job zum Überprüfen, ob das Php-Skript ausgeführt wird, wenn nicht, dann ausführen?

  2. Wie man einen Cronjob an bestimmten Wochentagen ausführt

  3. Ausführen eines Cron-Jobs unter Linux alle sechs Stunden

  4. Linux:Cronjob im Vordergrund ausführen

  5. Wie richte ich einen CRON-Job so ein, dass er alle 10 Sekunden unter Linux ausgeführt wird?

So richten Sie einen Cron in cPanel ein und führen ihn aus

Wie würde ich einen Cron-Job dazu bringen, alle 30 Minuten ausgeführt zu werden?

Wie kann ich einen Cron-Job anzeigen, der gerade ausgeführt wird?

Cron-Job läuft manchmal nicht

Wie führe ich alle 3 Monate einen Cron-Job aus?

So konfigurieren Sie den Cron-Job so, dass er alle 2 Tage um 23:00 Uhr ausgeführt wird