Запуск сценария python с cron, только если он не запущен

Мне нужно запускать скрипт 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 ()

Кажется, этот подход работает.

Я что-то упускаю? Могу ли я столкнуться с какими-либо проблемами, используя этот подход?

Есть ли другие рекомендуемые или «правильные» способы достижения такого поведения?

Благодарю вас за любое предложение.

18
задан Hyperboreus 27 May 2011 в 00:55
поделиться