Wie führe ich einen Cron-Job jedes Mal aus, wenn die vorherige Ausführung beendet ist?

Ich möchte jedes Mal, wenn es fertig ist, ein Python-Skript ausführen, und ich denke, ich kann dies mit Cron tun, aber ich bin mir nicht sicher, wie es geht.

Die Idee ist, dass jedes Mal, wenn das Python-Skript beendet wird, es immer wieder ausgeführt werden muss.

Ich habe hier nach Antworten gesucht, aber ich kann nichts Ähnliches finden.

Warum nicht das Skript in eine Schleife versetzen, anstatt es zu beenden oder es auszuführen, wenn etwas passiert, z. B. ändert sich ein Verzeichnis, je nachdem, wonach es sucht
Das Skript wird zum Scrapen von Google-Ergebnissen verwendet, daher muss es aufgrund von IP-Überlastung einige Zeit dauern.
Es könnte also eine Schleife ausführen und gestartet werden, um es neu zu starten, wenn es abstürzt (letzteres würde auch funktionieren, wenn es normal endet).

Antworten (2)

Im Terminal:

while :; do ./script_name; done

oder

while :; do python programm.py; done

Wenn Sie etwas Ruhezeit hinzufügen möchten, bevor Sie das Programm erneut ausführen, verwenden Sie den Befehl „sleep“:

Zum Beispiel:

while :; do python programm.py; sleep 90; done

In diesem Beispiel ruht der Zyklus 90 Sekunden, bevor Sie Ihr Programm erneut ausführen

Muss ich irgendwo etwas schreiben wie: python programm.py?
während [ 1 ]; tun python programm.py; fertig Sie können weitere Befehle hinzufügen, wenn Sie möchten: while [ 1 ]; tun python programm.py; Befehl2; Befehl3; usw; done Teilen Sie es einfach mit ;
Antwort unten und meine Antwort ist Shell-Skripting. Bash, sh usw.: developer.apple.com/library/mac/documentation/opensource/…
Danke @user3439968 - Ich habe die dritte Anweisung verwendet und es funktioniert wie ein Zauber. Das ist alles, was ich brauche.

Cron ist ein Planer, es ist gut, wenn Sie möchten, dass Ihr Skript alle 5 Minuten oder jeden 3 lange dauert oder wenn die Zeit bis zur Fertigstellung variabel ist usw.) im Wesentlichen zufällig ist, ist dies nicht die beste Wahl.

Sie können entweder etwas Logik direkt in das Skript einfügen oder das Skript einfach mit etwas Shell-Skriptlogik gemäß der Antwort von @ user3439968 umschließen. Meine Version ist im Wesentlichen dieselbe, aber ich habe sie etwas ausführlicher mit Optionen zum Beibehalten gezeigt ein Auge auf die Neustarts usw. Sie können dies in so ziemlich jede Befehlszeilen-Shell eingeben, am einfachsten, indem Sie Terminales einfach öffnen und direkt eingeben

while true
do
    /path/to/script.py
    sleep 60
    date >> /path/to/logfile.txt
    echo "The script ended, and I restarted it after 60 seconds" >> /path/to/logfile.txt
done

Im obigen Beispiel erfolgt der Neustart nicht sofort, sondern wartet 60 Sekunden und fügt dann bei jedem Neustart das aktuelle Datum und eine Nachricht an eine Protokolldatei an. Sie können jeden Steuercode nach der ersten Ausführung des Python-Skripts und der doneZeile einfügen und es sogar dazu bringen, Ihnen eine E-Mail zu senden, dass es neu gestartet wurde usw.

Da Sie nicht angeben, was „wahr“ ist, kann es niemals falsch sein, also wird im Wesentlichen alles zwischen dound doneimmer wieder wiederholt, bis es ein geeignetes Interrupt-Signal wie einen CTRL-coder einen kill -9 PIDTypbefehl von einer anderen Befehlszeilensitzung erhält.