将cronjob添加到crontab而不删除现有的cronjobs

时间:2017-08-08 18:31:15

标签: linux bash

我已经预定了一些cronjob。

当我crontab -e时,我会找到现有的cronjobs。

* * * * *  #Runs every minute
30 * * * *  #Runs at 30 minutes past the hour
45 6 * * *  #Runs at 6:45 am every day
45 18 * * *  #Runs at 6:45 pm every day
00 1 * * 0  #Runs at 1:00 am every Sunday
00 1 * * 7  #Runs at 1:00 am every Sunday

现在我想添加另一个cronjob,但不需要手动执行crontab -e。并安排工作。

我在文件中有cronjob。我做了如下:

crontab /home/$USER/new_cronjob

如上所述,所有现有作业都将被删除,并且只添加了new_cronjob

* * * * *  #Runs every minute
30 * * * *  #Runs at 30 minutes past the hour
45 6 * * *  #Runs at 6:45 am every day
45 18 * * *  #Runs at 6:45 pm every day
00 1 * * 0  #Runs at 1:00 am every Sunday
00 1 * * 7  #Runs at 1:00 am every Sunday
* * * * *  /home/$USER/new_cronjob

我的结果crontab /home/$USER/new_cronjob

* * * * *  /home/$USER/new_cronjob

实现我想要的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

您可以使用所有cron作业创建临时文件:

crontab -l > /tmp/temp_crontab
cat /home/$USER/new_cronjob >> /tmp/temp_crontab
crontab /tmp/temp_crontab

答案 1 :(得分:1)

您可以通过将旧的crontab和文件的内容传递给crontab -来附加到现有的crontab,如下所示:

{ crontab -l; cat /home/$USER/new_cronjob; } | crontab -

{ ... }是对多个命令进行分组。 我们在这里对两个命令进行分组,以便我们可以将两者的完整输出组合在一起。

答案 2 :(得分:0)

除了@janos's answer中演示的标准方法,以防止重复条目之外,您还需要在重写crontab之前grep -v将它们删除:

{
    line="* * * * *  /home/$USER/new_cronjob"
    crontab -l | grep -Fv "$line"
    echo "$line"
} 2>/dev/null | crontab -