Zusätzlich zu anderen Antworten, insbesondere dem von @soulcake geposteten Link: Wenn Sie einen Befehl mit langer Laufzeit mit einem zu kurzen Intervall planen, führt cron den zweiten Befehl vor Abschluss des ersten Befehls problemlos aus (es sei denn, im Befehl ist eine Art Mutex implementiert). .
Dies verlangsamt den ursprünglichen Befehl häufig noch weiter und führt dazu, dass eine andere Instanz ausgeführt wird, bevor die vorherigen abgeschlossen sind usw. Oder es kann aus anderen Gründen unerwünscht sein.
Eine allgemeine Möglichkeit, dies zu verhindern, besteht darin, das Ausführen des Befehls mit einem Wächter zu bedingen, der sicherstellt, dass ein vorheriger Befehl nicht ausgeführt wird. Beispielsweise:
10 * * * * pgrep my_slow_command >/dev/null || /usr/local/bin/my_slow_command
Stellen Sie sicher, dass pgrep mit dem Namen des Befehls übereinstimmt, wenn es ausgeführt wird, z. B. haben Python-Skripte Python als Namen der ausführbaren Datei, was wahrscheinlich nicht spezifisch genug ist, und Sie müssten auch mit dem Skriptnamen des Pythons übereinstimmen.
10 * * * * pgrep -f my_script.py || /usr/local/bin/my_script.py
(pgrep ohne die Option '-f' stimmt jedoch mit den Namen der Bash-Skripte überein.)
Wenn Sie pgrep aus irgendeinem Grund nicht verwenden können:
10 * * * * ps ax | grep [m]y_command || /usr/local/bin/my_command
Die Klammern werden verwendet, um eine Übereinstimmung mit dem Befehl grep selbst zu vermeiden.