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

可以这样做吗?


当前回答

下面介绍如何在不直接编辑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> -

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

其他回答

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

pip install deploycron

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

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

下面介绍如何在不直接编辑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> -

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

下面是一个单行程序,它不使用/要求新作业在文件中:

(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 "0 1 * * * /root/test.sh" | tee -a /var/spool/cron/root

您可以在远程服务器上设置cronjob,如下所示:

#!/bin/bash
servers="srv1 srv2 srv3 srv4 srv5"
for i in $servers
  do
  echo "0 1 * * * /root/test.sh" | ssh $i " tee -a /var/spool/cron/root"
done

在Linux操作系统中,crontab文件的默认位置是/var/spool/cron/。在这里您可以找到所有用户的crontab文件。您只需要将cronjob条目附加到相应的用户文件中。在上面的例子中,根用户的crontab文件被附加了一个cronjob,用于每天凌晨1点运行/root/test.sh。