gpt4 book ai didi

Python crontab 自动添加换行符并禁用其他 cron 作业

转载 作者:行者123 更新时间:2023-12-01 06:29:18 24 4
gpt4 key购买 nike

我编写了一个 python 脚本来运行某些 cron 作业并使用 crontab 来执行相同的操作。

下面是代码片段:

import os
import inspect
from crontab import CronTab

def add_cron_job(scripts_list,frequency):
my_cron = CronTab(user='simrat')
for script in scripts_list:
if not cron_exists(my_cron,script):
command = 'python {}'.format(script)
job = my_cron.new(command=command, comment=script)
job.minute.every(frequency)

my_cron.write()

def cron_exists(my_cron, script):
for job in my_cron:
if job.comment == script:
return True
return False

if __name__ == "__main__":
#Frequency of every 1 minute
test_script = ['test1.py', 'test2.py']
add_cron_job(test_script,1)

#Frequency of every 1 day
test_script2 = ['test3.py']
add_cron_job(test_script2,1440)

以下是“crontab -e”的输出(注意添加了额外的空格)


* * * * * python test1.py # test1.py
* * * * * python test2.py # test2.py

*/1440 * * * * python test3.py # test3.py

当我重新运行 python cron_job 脚本时,它以某种方式禁用了最后一个 cron_job(test3.py),以下是 crontab 文件的输出:


* * * * * python test1.py # test1.py
* * * * * python test2.py # test2.py

# DISABLED LINE
# */1440 * * * * python test3.py # test3.py

*/1440 * * * * python test3.py # test3.py

以及它在控制台上抛出的错误:

No handlers could be found for logger "crontab"

所以我的问题有三层:

  1. 为什么运行 my_cron.write() 时命令顶部会有额外的空格?

  2. 为什么它会禁用最后一个 cron 作业,而不是忽略它,因为它已经存在(def cron_exits 应该处理这个问题)

  3. 抛出的错误有什么意义?

最佳答案

我运行了您的代码,并在第二次运行时出现以下错误:

'1440', not in 0-59 for Minutes

我将 1440 更改为 14 并多次运行代码。并且每次都找到相同的代码(不删除)


* * * * * python test1.py # test1.py
* * * * * python test2.py # test2.py

*/14 * * * * python test3.py # test3.py

我还没有阅读完整的 CronTab 代码,但很明显他们在读取现有 cron 命令期间放置了一些验证器,但在写入期间没有验证它。

我还使用不同的参数调用了 add_cron_job ,发现每次调用 my_cron.write() 时都会添加一个新行。 这不是错误,而是一项功能。

终于找不到记录器“crontab”的处理程序是日志记录问题。试试这个 Crontab Logger issue

关于Python crontab 自动添加换行符并禁用其他 cron 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59980850/

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