我需要通过我运行的脚本添加一个cron作业来设置服务器。我目前正在使用Ubuntu。我可以使用crontab -e,但这将打开一个编辑器来编辑当前的crontab。我想通过编程来实现。
可以这样做吗?
我需要通过我运行的脚本添加一个cron作业来设置服务器。我目前正在使用Ubuntu。我可以使用crontab -e,但这将打开一个编辑器来编辑当前的crontab。我想通过编程来实现。
可以这样做吗?
当前回答
另一个一次性向crontab添加多个脚本的解决方案:
cat <<EOF | crontab -
* * * * * /bin/foo.sh
* * * * * /bin/gaga.sh
EOF
其他回答
我用python写了一个crontab部署工具:https://github.com/monklof/deploycron
pip install deploycron
安装crontab非常简单,这将把crontab合并到系统现有的crontab中。
from deploycron import deploycron
deploycron(content="* * * * * echo hello > /tmp/hello")
作为对那些建议crontab -l | crontab -的更正:这并不适用于每个系统。例如,我必须在运行旧版本SUSE的数十台服务器上向根crontab添加一个作业(不要问为什么)。旧的suse在crontab -l的输出前加上注释行,使得crontab -l | crontab -非幂等性(Debian在crontab的manpage中发现了这个问题,并修复了Vixie Cron版本以改变crontab -l的默认行为)。
要在crontab -l添加注释的系统上以编程方式编辑crontab,可以尝试以下方法:
编辑=cat crontab -e > old_crontab;Cat old_crontab new_job | crontab -
EDITOR=cat告诉crontab使用cat作为编辑器(不是通常的默认vi),这不会更改文件,而是将其复制到标准输出。如果crontab -期望输入的格式与crontab -e输出的格式不同,则仍然可能失败。不要尝试用crontab -e替换最终的crontab -它将不起作用。
下面是一个单行程序,它不使用/要求新作业在文件中:
(crontab -l 2>/dev/null; echo "*/5 * * * * /path/to/job -with args") | crontab -
2>/dev/null很重要,这样您就不会得到一些*nixes在当前没有crontab项时产生的no crontab for username消息。
对于crontabs用户(包括root),您可以执行如下操作:
crontab -l -u user | cat - filename | crontab -u user -
其中名为“filename”的文件包含要追加的项。还可以使用sed或其他工具来代替cat进行文本操作。您应该使用crontab命令,而不是直接修改文件。
类似的操作是:
{ crontab -l -u user; echo 'crontab spec'; } | crontab -u user -
如果您正在修改或创建系统crontab,那么可以像操作普通文本文件一样对它们进行操作。它们存储在/etc/cron.d, /etc/cron.每小时,/etc/cron.日报》/etc/cron.每周,/etc/cron.“/etc/crontab”和“/etc/anacrontab”文件。
最简单的解决方案是使用echo和>>,然后运行crontab filename 例:
ssh $HOST "echo \"* * * * * echo hello >> /var/spool/cron/crontabs/root\"; sleep 2; crontab /var/spool/cron/crontabs/root"