2017-04-03 75 views
0

我已经写了一个小的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") 

回答

0

权限

确保你正在运行的Python脚本root的用户。我做了一些快速测试,其他用户无法访问他们的/ var/spool/cron/crontabs/$用户名文件。如果我可以正确记住,这是设计的。你应该使用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) 
0

注意从人的cron:
的cron搜索crontab文件的脱机区域(在/ var /线轴/ cron的/ crontabs中)(这是在 账户命名的/ etc/passwd中);找到的crontabs被加载到内存中。请注意,这个目录中的crontabs不应该是 直接访问 - 应该使用crontab命令来访问和更新它们。


问题:...同样的工作,当给手动做工精细

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


搜索一个python module或使用module subprocess.run(...)内的的.py开始从crontab <filename>

using-the-subprocess-module

回来和标志你的问题,如果这是为你工作或回答评论何乐而不为。