Então, eu tenho um script python que inicio no terminal apenas digitando o nome do script (python SCRIPTNAME.py)
Só estou me perguntando: é possível criar um script ou cron job que simplesmente pare e inicie o script python a cada hora?
Responder1
A melhor abordagem seria via GNU timeout
como em
timeout -k 3600 python3 /path/to/script.py
onde -k significa "matar depois" e tempo em segundos.
Então, para que o script seja executado, finalizado e reiniciado a cada hora, você poderia fazer
while timeout -k 3600 python3 /path/to/script; do
sleep 2
done
onde sleep 2
é apenas adicionar um pequeno atraso antes de reiniciar
Como alternativa, considere usar o módulo Threading em Python para agendar as partes relevantes do script. Ver https://stackoverflow.com/a/50537798/3701431
Responder2
Parece que você querdemonizarou crie um serviço para seu script Python. É assim que outros aplicativos são iniciados, na ordem certa ou nos momentos certos.
Você desejará criar um systemd
serviço para seu script Python e, em seguida, interagir com ele por meio do systemctl
.
systemctl restart mypython
systemctl enable mypython
Depois de ter seu script funcionando dessa maneira, você pode configurá-lo cron
para fazer o que for necessário, que provavelmente será reiniciar o serviço.
Dependendo do objetivo do seu script e da sua capacidade de determinar se ele está sendo executado corretamente, você pode aprimorar seu serviço para relatar se ele parar de ser executado ou até mesmo procurar soluções comomonit
.
Como apontado,esta respostafornece informações úteis, mas contém ferramentas desatualizadas, como rc.local
. Em vez de usar systemd
, você pode rastrear o PID do processo e, em seguida, encerrar esse processo e executar novamente o script a cada hora.