我们知道crontab
命令用于Linux中的计划任务。
我想写一个Python脚本。它的功能是接收一些数据(这些数据与crontab设置有关)并执行'crontab'命令以重置用户的crontab文件的内容。
我知道如何在Python中执行外部Linux命令。但是当您执行crontab
命令(例如crontab -u xxx -e
)时,您需要与编辑器交互以修改用户的crontab文件。 (假设我不知道文件的位置。对于新用户,crontab
无论如何都会生成一个新文件。而且我不会像root
用户那样执行命令。
所以问题是,如何在Python中执行crontab
?有没有办法避免与编辑器交互以修改Python中用户的crontab文件?
我的操作系统是ubuntu 14.01。
答案 0 :(得分:3)
您可以使用python-crontab。
sudo -H pip install python-crontab
列出系统cron作业:
from crontab import CronTab
cron = CronTab(tabfile='/etc/crontab', user=False) # system users cron
# cron = CronTab(user=True) # current users cron
# cron = CronTab(user='username') # other users cron
for job in cron:
print(job)
创建一份新工作:
job = cron.new(command='/foo/bar', comment='SomeID')
启用/禁用作业:
job.enable()
job.enable(False)
通过评论查找现有职位:
iter = cron.find_comment('ID or some text')
删除Items ::
cron.remove( job )
cron.remove_all('echo')
cron.remove_all(comment='foo')
cron.remove_all(time='*/2')
清除所有工作的全部cron ::
cron.remove_all()
答案 1 :(得分:1)
正如你在Python中想要的那样,你可以做这样的“事情”:
import os;
...
cur_cron = os.popen('crontab -l > current_crontab.txt');
cur_cron.read();
cur_cron.close();
fopen_cron = file('current_crontab.txt', 'a');
fopen_cron.write("\n### Comment here if you like");
fopen_cron.write("\n* * * * * Put your command here");
fopen_cron.close();
希望它有所帮助。
答案 2 :(得分:1)
使用Vixie crontab,您可以执行以下操作(显然您可以检查错误等):
import subprocess
cron_in = subprocess.Popen(['crontab', '-l'],
stdout=subprocess.PIPE)
cur_crontab, _ = cron_in.communicate()
# new_crontab = do_my_magic(cur_crontab)
cron_out = subprocess.Popen(['crontab', '-'],
stdin=subprocess.PIPE)
cron_out.communicate(input=new_crontab)
答案 3 :(得分:0)
您可以/应该首先使用crontab -l
转储当前的crontab,按照您想要的方式进行编辑(例如添加一些行或修改),然后安装新的。
这通常适用于crontab <filename>
,但也应该使用crontab -
,然后将新内容传递到流程的标准中。
答案 4 :(得分:0)
如果你要做的只是重置用户crontab文件的内容,那么只需删除crontab文件(或用默认值覆盖),然后重新加载cron服务。