Crontab未按脚本注册更改

时间:2018-08-29 00:51:02

标签: cron subprocess macos-sierra

我正在使用python subprocesscrontab进行更改,特别是使用:

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吗?

1 个答案:

答案 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,并最终激活我的分钟任务。