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 2
nur 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 systemd
Dienst 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 cron
es 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.