【发布时间】:2011-09-03 01:01:15
【问题描述】:
我需要每分钟运行一个 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 ()
这种方法似乎有效。
我有什么遗漏吗?使用这种方法会遇到什么麻烦吗?
是否有更多建议或“适当”的方式来实现这种行为?
感谢您的任何建议。
【问题讨论】: