Necesito ejecutar un script de python (job.py) cada minuto. Este script no debe iniciarse si ya se está ejecutando. Su tiempo de ejecución puede ser de entre 10 segundos y varias horas.Ejecutar script de Python con cron solo si no se ejecuta
por lo que poner en mi crontab:
* * * * * root cd /home/lorenzo/cron && python -u job.py 1>> /var/log/job/log 2>> /var/log/job/err
evitar comenzar la secuencia de comandos cuando ya se está ejecutando, uso flock().
Este es el guión (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()
Este enfoque parece funcionar.
¿Hay algo que me falta? ¿Hay algún problema que pueda encontrar al usar este enfoque?
¿Existen formas más recomendadas o "adecuadas" para lograr este comportamiento?
Gracias por cualquier sugerencia.
Muy buena pregunta. – erjoalgo