如何使用脚本在crontab中添加新任务

时间:2017-03-21 23:27:54

标签: linux ubuntu cron crontab cron-task

我需要使用crontab来添加要在特定时间完成的新任务。我需要使用脚本添加这些任务。我会做类似的事情:

echo "command" >> /etc/crontab

但是我知道这个crontab文件只适用于root用户,所以我需要使用:

crontab -e

打开我自己的任务列表。问题是上一个命令打开一个临时文件,我找不到它。 (它在/ tmp中有一个随机名称或者什么?)我会做类似的事情:

echo "5 5 5 5 5 user command" | crontab -e

在我自己的crontab列表中写一个新行,但这不起作用。

我错了什么?有没有人有解决这个问题的想法?我正在使用Ubuntu。

2 个答案:

答案 0 :(得分:2)

您的当前方法遇到困难,因为crontab -e无法从标准输入读取。但是,没有crontab开关的-e会从标准输入读取。

最明显的方法是将新的cron作业附加到现有的crontab:

crontab -l > current_cron
cat >> current_cron << EOF
# new cron job here
EOF
crontab < current_cron
rm -f current_cron

这种方法的一个明显问题是没有检查cron作业是否已经存在。这就是它可能变得有点棘手的地方。

解决这个问题的一种方法是在crontab中安装“脚本管理部分”,通常位于底部:

# DO NOT MODIFY THE SECTION BELOW MANUALLY.  IT'S MANAGED BY AUTOMATION.
#---script managed section---
"cron job 1"
"cron job 2"

然后,脚本可以管理此部分 - 最好有一个脚本来管理所有自动cron作业:

crontab -l > current_cron
sed '/---script managed section---/q' current_cron > new_cron
cat >> new_cron << EOF
# updated cron jobs here
EOF
crontab < new_cron
rm -f new_cron current_cron

如果我们需要更细粒度的控制,那么我们可以为每个托管cron作业创建一个部分,使用开始和结束标记,并使脚本每次处理特定部分。

然而,Ubuntu有一个更好的主意。我们可以完全取消crontab并使用/etc/cron.d。在这里,我们为每个cron作业都有一个文件,它遵循cron作业规范的确切格式。由于cron作业和/etc/cron.d文件之间存在1:1的对应关系,因此它们直接作为文件而不是crontab命令进行管理,因此自动化更容易。

来自Ubuntu上的man cron

  

在Debian中,cron读取/etc/cron.d目录中的文件。 cron以与/ etc / crontab文件相同的方式处理/etc/cron.d中的文件(它们遵循该文件的特殊格式,即它们包括用户字段)。但是,它们独立于/ etc / crontab:例如,它们不会从中继承环境变量设置。此更改特定于Debian。

答案 1 :(得分:1)

crontab 使用该临时文件为您提供插入新命令的权限。您无法编辑自己的文件,或者弄乱系统的文件副本。相反,尝试创建自己的文件;然后我们** crontab -l来获取系统crontab中列出的

如果你很顽固,你可以尝试将 vi 命令流式传输到 crontab -e ,但这样做很难做到

这足以让你前进吗?