我需要每分钟运行一个 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 ()
这种方法似乎有效。
有什么我想念的吗?使用这种方法会遇到什么麻烦吗?
是否有更多建议或“适当”的方式来实现这种行为?
我感谢你的任何建议。