我正在使用python subprocess
对crontab
进行更改,特别是使用:
subprocess.Popen(["crontab", cron_tab_file])
一切正常,当我使用crontab -l
检查crontab时,cron_tab_file
中的所有内容均已存在。但是,什么也没运行。
我一直使用完整路径,例如:
* * * * * /bin/bash /full/path/to/test.sh
但是,如果我使用crontab -e
从终端再次保存crontab却没有实际更改,则crontab突然变为活动状态并开始在其中运行命令。我不明白,是否应该在不进行手动更新的情况下按crontab中的内容运行cron?我正在使用MacOS Sierra。这种Cron行为困扰着我,我无法在任何在线位置找到解决方案或解释。我已经反复尝试,并且每次通过python脚本进行的编辑均不起作用,并且如果我通过手动保存对其进行更改,则它会突然起作用。
其他信息
我以sudo权限检查了/usr/lib/cron/tabs
,无论我是cron文件还是脚本,我的cron文件总是会更改。但是如果是脚本对其进行了更改,则该更改将不会运行。如果我手动编辑它,那么将显示消息crontab: installing new crontab
,并且新命令将运行。有命令强制cron安装新的crontab吗?
答案 0 :(得分:0)
我刚刚发现了一个非常丑陋的解决方法。
def activate_cron():
execute = subprocess.Popen(["echo", "\033:wq\n"], stdout=subprocess.PIPE)
activate = subprocess.Popen(["crontab", "-e"], stdin=execute.stdout)
# Wait for crontab to save
time.sleep(5)
activate.kill()
这将输出crontab: installing new crontab
,并最终激活我的分钟任务。