【问题标题】:python code to add jobs to crontab not working将作业添加到 crontab 的 python 代码不起作用
【发布时间】:2017-04-03 13:42:23
【问题描述】:

我编写了一个小型 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")

【问题讨论】:

    标签: python crontab


    【解决方案1】:

    权限

    确保您以 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)
    

    【讨论】:

      【解决方案2】:

      注意事项来自 man cron:
      cron 在其假脱机区域 (/var/spool/cron/crontabs) 中搜索 crontab 文件(这些文件以 /etc/passwd);找到的 crontab 被加载到内存中。请注意,此目录中的 crontabs 不应 直接访问 - crontab 命令 应该用于访问和更新它们。


      问题:......同样的工作,手动工作正常

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


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

      using-the-subprocess-module

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-01
        • 2023-03-22
        • 1970-01-01
        • 2021-09-24
        • 1970-01-01
        • 1970-01-01
        • 2017-02-15
        • 2021-05-02
        相关资源
        最近更新 更多