用于向crontab添加作业的python代码无法正常工作

时间:2017-04-03 13:42:24

标签: python crontab

我编写了一个小的python脚本来自动完成向crontab添加作业的过程,但是当手动正常工作时,通过脚本添加的作业无法正常工作

这是代码:

#!/usr/bin/python3

def scheduler(time=["*","*","*","*","*"],message="no message set"):
 crontab_pointer=open('/var/spool/cron/crontabs/sky','a')
 schedule_string="\n"+" ".join(time)+" "+message+"\n"
 crontab_pointer.write(schedule_string)
 crontab_pointer.close()


if __name__=="__main__":
 scheduler(time=["52","18","*","*","*"],message="env DISPLAY=:0 /home/sky/scripts/notify2.sh")

2 个答案:

答案 0 :(得分:0)

权限

确保用户以root身份运行python脚本。我做了一些快速测试,其他用户无法访问他们的/ var / spool / cron / crontabs / $ username文件。如果我能记得正确,这是设计的。您应该使用crontab -e命令编辑您的crontab。

sudo python editcron.py

真的,你写的Python并不是完全错误的。它打开文件,添加字符串,然后关闭它。这里没有什么突破性的。我刚刚添加了一些文件系统检查,以确保您可以访问该文件。

代码

import os

def scheduler(time=['*', '*', '*', '*', '*'], message='no message set', username='sky'):
    crontab_fn = '/var/spool/cron/crontabs/{!s}'.format(username)
    if not os.path.exists(crontab_fn):
        raise StandardError("File {} missing".format(crontab_fn))
    if not os.access(crontab_fn, os.W_OK):
        raise StandardError("Cannot write to file, run as root")
    crontab_fh = open(crontab_fn, 'a')
    schedule_string = "\n{t:s} {m:s}\n".format(
        t=' '.join(time),
        m=message
    )
    crontab_fh.write(schedule_string)
    crontab_fh.close()

if __name__ == "__main__":
    time = ["52","18","*","*","*"]
    message = "env DISPLAY=:0 /home/sky/scripts/notify2.sh"
    scheduler(time, message)

答案 1 :(得分:0)

  来自man cron的

注意
         cron在其假脱机区域(/ var / spool / cron / crontabs)中搜索crontab文件(以帐户命名)          / etc / passwd中);发现的crontabs被加载到内存中。请注意,此目录中的crontabs不应该是          直接访问 - 应使用 crontab命令来访问和更新它们。

  

问题:...手动正常工作时的相同工作

我假设你在这里使用crontab <filename>

搜索python module或使用module subprocess.run(...) .py 中启动crontab <filename>

using-the-subprocess-module

如果这对您有用,请回来并将您的问题标记为已回答,或者为什么不对其进行评论。