Execução de script python com cron apenas se não estiver executando
Preciso executar um script python (job.py) a cada minuto. Este script não deve ser iniciado se já estiver em execução. O tempo de execução pode variar entre 10 segundos e várias hora
Então eu coloquei no meu crontab:
* * * * * root cd /home/lorenzo/cron && python -u job.py 1>> /var/log/job/log 2>> /var/log/job/err
Para evitar iniciar o script quando ele já estiver em execução, uso flock ().
Este é o script (job.py):
import fcntl
import time
import sys
def doIncrediblyImportantThings ():
for i in range (100):
sys.stdout.write ('[%s] %d.\n' % (time.strftime ('%c'), i) )
time.sleep (1)
if __name__ == '__main__':
f = open ('lock', 'w')
try: fcntl.lockf (f, fcntl.LOCK_EX | fcntl.LOCK_NB)
except:
sys.stderr.write ('[%s] Script already running.\n' % time.strftime ('%c') )
sys.exit (-1)
doIncrediblyImportantThings ()
sta abordagem parece funciona
Há algo que me falta? Há algum problema que eu possa encontrar usando essa abordagem?
Existem formas mais recomendadas ou "apropriadas" de atingir esse comportament
Agradeço qualquer sugestão.