我需要每分钟运行一次python脚本(job.py)。如果脚本已经在运行,则该脚本不能启动。它的执行时间可以在10秒到几个小时之间。只有在没有运行的情况下才使用cron运行python脚本
所以我把我的crontab中:
* * * * * root cd /home/lorenzo/cron && python -u job.py 1>> /var/log/job/log 2>> /var/log/job/err
为了避免启动脚本时,它已经在运行,我用羊群()。
这是脚本(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()
这种做法似乎工作。
有什么我失踪?我可以使用这种方法遇到麻烦吗?
是否有更多的建议或“适当”的方式来实现这种行为?
我感谢您的任何建议。
大问题。 – erjoalgo 2013-06-28 04:09:12