Спасибо за вклад. Но я думаю, что использование вашего кода было бы немного похоже на стрельбу по птицам из пушек, поскольку это приносит гораздо больше функциональности (параллельное выполнение и т. Д.), Чем мне действительно нужно.

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

Этот подход, кажется, работает.

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

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

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

Ответы на вопрос(1)

Ваш ответ на вопрос