Мне нужно запускать скрипт на python (job.py) каждую минуту. Этот скрипт не должен запускаться, если он уже запущен. Время его выполнения может составлять от 10 секунд до нескольких часов.
Итак, я положил в свой crontab:
* * * * * root cd /home/lorenzo/cron && python -u job.py 1>> /var/log/job/log 2>> /var/log/job/err
Чтобы не запускать скрипт, когда он уже запущен, я использую flock ().
Это скрипт (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 ()
Этот подход, кажется, работает.
Есть ли что-то, чего мне не хватает? Есть ли проблемы, с которыми я могу столкнуться, используя этот подход?
Существуют ли более рекомендуемые или "правильные" способы достижения такого поведения?
Я благодарю вас за любое предложение.