Starten Sie etwa jede Stunde ein Python-Skript neu

Starten Sie etwa jede Stunde ein Python-Skript neu

Ich habe also ein Python-Skript, das ich im Terminal starte, indem ich einfach den Skriptnamen eingebe (python SCRIPTNAME.py).

Ich frage mich nur, ob es möglich ist, ein Skript oder einen Cron-Job zu erstellen, der das Python-Skript einfach jede Stunde stoppt und dann startet?

Antwort1

Der beste Ansatz wäre über GNU timeout wie in

timeout -k 3600 python3 /path/to/script.py

wobei -k für „kill after“ und die Zeit in Sekunden steht.

Um das Skript jede Stunde auszuführen, zu beenden und neu zu starten, können Sie Folgendes tun:

while timeout -k 3600 python3 /path/to/script; do
   sleep 2
done

wo sleep 2nur eine kleine Verzögerung vor dem Neustart hinzugefügt wird


Alternativ können Sie auch das Threading-Modul in Python verwenden, um die relevanten Teile des Skripts zu planen. Siehe https://stackoverflow.com/a/50537798/3701431

Antwort2

Es klingt, als ob Siedämonisieren, oder erstellen Sie einen Dienst für Ihr Python-Skript. So werden andere Anwendungen gestartet, und zwar in der richtigen Reihenfolge oder zum richtigen Zeitpunkt.

Sie möchten einen systemdDienst für Ihr Python-Skript erstellen und dann über eine Schnittstelle damit kommunizieren systemctl.

systemctl restart mypython
systemctl enable mypython

Sobald Ihr Skript auf diese Weise funktioniert, können Sie crones nach Bedarf einrichten. Wahrscheinlich wird dabei der Dienst neu gestartet.

Abhängig vom Ziel Ihres Skripts und Ihrer Fähigkeit, festzustellen, ob es ordnungsgemäß ausgeführt wird, können Sie Ihren Dienst so erweitern, dass er meldet, wenn er nicht mehr ausgeführt wird, oder sogar nach Lösungen wie diesen suchen:monit.


Wie erwähnt,diese Antwortbietet nützliche Informationen, enthält aber veraltete Tools wie rc.local. Anstatt zu verwenden systemd, können Sie die PID des Prozesses verfolgen, diesen Prozess dann beenden und Ihr Skript jede Stunde erneut ausführen.

verwandte Informationen