我需要每分钟运行一个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 ()
这种方法似乎可行。
我是否遗漏了什么?使用这种方法会遇到任何问题吗?
实现这种行为的更建议或“合适”的方法有哪些?
感谢您提出的任何建议。