gpt4 book ai didi

python - 仅在未运行时使用 cron 运行 python 脚本

转载 作者:太空狗 更新时间:2023-10-29 16:56:53 24 4
gpt4 key购买 nike

我需要每分钟运行一个 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 ()

这种方法似乎可行。

有什么我想念的吗?使用这种方法我会遇到什么麻烦吗?

是否有更多建议或“适当”的方法来实现此行为?

谢谢你的建议。

最佳答案

我唯一的建议是使您的异常处理更具体一些。您不想有一天不小心删除了 fcntl 导入并隐藏了导致的 NameError。始终 try catch 您要处理的最具体的异常。在这种情况下,我建议如下:

import errno

try:
fcntl.lock(...)
except IOError, e:
if e.errno == errno.EAGAIN:
sys.stderr.write(...)
sys.exit(-1)
raise

这样,任何其他无法获得锁的原因都会显示出来(可能在您的电子邮件中,因为您正在使用 cron),您可以决定是否需要管理员查看,另一个程序要处理的情况,或其他。

关于python - 仅在未运行时使用 cron 运行 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6146523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com