我编写了一个小的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 :(得分: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>
。
如果这对您有用,请回来并将您的问题标记为已回答,或者为什么不对其进行评论。