我需要通过我运行的脚本添加一个cron作业来设置服务器。我目前正在使用Ubuntu。我可以使用crontab -e,但这将打开一个编辑器来编辑当前的crontab。我想通过编程来实现。

可以这样做吗?


当前回答

它是一种增量添加cron作业的方法:

  ssh USER_NAME@$PRODUCT_IP nohup "echo '*/2 * * * * ping -c2 PRODUCT_NAME.com >> /var/www/html/test.html' | crontab -u USER_NAME -"

其他回答

/etc/crontab只是一个ascii文件,所以最简单的就是

 echo "*/15 * * * *   root     date" >> /etc/crontab

这会增加一份每15分钟给你发邮件的工作。根据您的喜好进行调整,并通过grep或其他方法测试是否已经添加了该行以使脚本具有幂等性。

在Ubuntu等平台上,你也可以将文件放到/etc/cron.*这更容易做和测试——另外,你不会弄乱(系统)配置文件,如/etc/crontab。

我用python写了一个crontab部署工具:https://github.com/monklof/deploycron

pip install deploycron

安装crontab非常简单,这将把crontab合并到系统现有的crontab中。

from deploycron import deploycron
deploycron(content="* * * * * echo hello > /tmp/hello")

另一个一次性向crontab添加多个脚本的解决方案:

cat <<EOF | crontab -
* * * * * /bin/foo.sh
* * * * * /bin/gaga.sh
EOF

下面介绍如何在不直接编辑cron文件的情况下修改cron条目(这是不受欢迎的)。

crontab -l -u <user> | sed 's/find/replace/g' | crontab -u <user> -

如果你想删除一个cron条目,使用这个:

crontab -l -u <user> | sed '/find/d' | crontab -u <user> -

我知道这不是高拉夫想要的,但为什么不把所有的解都集中在一起呢?

在Ubuntu和许多其他发行版中,你可以把一个文件放到/etc/cron.D目录,其中包含包含有效crontab条目的单行。不需要向现有文件添加行。

如果你只是需要每天运行一些东西,就把一个文件放在/etc/cron.daily中。同样,您也可以将文件放入/etc/cron.每小时,/etc/cron./etc/cron.weekly。