web-dev-qa-db-fra.com

Redémarrez un script python toutes les heures environ

J'ai donc un script python que je lance dans le terminal en tapant simplement le nom du script (python SCRIPTNAME.py)

Je me demande simplement s'il est possible de créer un script ou un travail cron qui s'arrête tout simplement, puis qui commence ce script python toutes les heures?

1
Mustillo

On dirait que vous voulez démoniser , ou créer un service pour votre script Python. C’est ainsi que d’autres applications démarrent, dans le bon ordre ou au bon moment.

Vous voudrez créer un service systemd pour votre script Python, puis vous y connecter via systemctl.

systemctl restart mypython
systemctl enable mypython

Une fois que votre script fonctionne de cette manière, vous pouvez configurer cron pour faire tout ce dont vous avez besoin, à savoir probablement pour redémarrer le service.

En fonction de l'objectif de votre script et de votre capacité à déterminer s'il fonctionne correctement, vous pouvez améliorer le service pour signaler s'il cesse de fonctionner, ou même rechercher des solutions telles que monit .


Comme indiqué, cette réponse fournit des informations utiles, mais contient des outils obsolètes, tels que rc.local. Au lieu d'utiliser systemd, vous pouvez suivre le PID du processus, puis arrêter ce processus et réexécuter votre script toutes les heures.

2
earthmeLon

La meilleure approche serait via GNU timeout comme dans

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

où -k signifie "tuer après" et le temps en secondes.

Donc, pour que le script soit exécuté, terminé et redémarré toutes les heures, vous pouvez le faire

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

sleep 2 consiste simplement à ajouter un petit délai avant de redémarrer


Vous pouvez également utiliser le module Threading dans Python pour planifier les parties pertinentes du script. Voir https://stackoverflow.com/a/50537798/3701431

2