如果不存在,将条目插入crontab(如果可能,请作为一行代码)

11

如何在不改变 /etc/crontab 文件原内容的前提下,将新条目插入到其中?最好使用一行命令实现。

这是我想要插入到 /etc/crontab 中的示例条目,如果已经存在,请不要重复插入。

*/1 *  *  *  * some_user python /mount/share/script.py

我正在使用CentOS 6.6,目前我有以下内容:

if grep "*/1 *  *  *  * some_user python /mount/share/script.py" /etc/crontab; then echo "Entry already in crontab"; else echo "*/1 *  *  *  * some_user python /mount/share/script.py" >> /etc/crontab; fi 
3个回答

23

您可以这样做:

grep 'some_user python /mount/share/script.py' /etc/crontab || echo '*/1 *  *  *  * some_user python /mount/share/script.py' >> /etc/crontab
如果文本行不存在,grep 会返回 1,因此或运算符 || 的右侧将被执行。

3
我理解现在我们不应该直接编辑/etc/crontab文件,那么我们如何使用crontab -e完成它呢? - tofutim
3
将以下内容翻译为中文:(crontab -l | grep 'some_user python /mount/share/script.py') || { crontab -l; '*/1 * * * * some_user python /mount/share/script.py'; } | crontab -这行命令的意思是:检查当前用户的crontab列表中是否已经存在“some_user python /mount/share/script.py”的任务,如果不存在,则添加该任务并设置其每分钟执行一次。如果任务已经存在,则不做任何操作。 - PhilJ
@PhilJ 为什么我们在 '*/1 * * * *....' 前要使用 crontab -l? - Estet
对我来说不起作用:“权限被拒绝”。打算使用 tee 探索选项。 - Bix
@PhilJ 出现错误 -bash: */1 * * * * some_user python /mount/share/script.py: No such file or directory - Athena Wisdom
@Estet 我们使用它来获取现有的cronjobs。 - T Hansda

0
你可以这样做:
if grep "\*\/5 \* \* \* \* /usr/local/bin/test.sh" /var/spool/cron/root; then echo "Entry already in crontab"; else echo "*/5 * * * * /usr/local/bin/test.sh" >>  /var/spool/cron/root; fi

甚至更加简洁:

grep '\*\/12 \* \* \* \* /bin/yum makecache fast' /var/spool/cron/root \
    || echo '*/12 * * * * /bin/yum makecache fast' >> /var/spool/cron/root

你不应该直接写入 /var/spool/cron/root,文档中明确指出,你必须通过 crontab 进行操作。/var/spool/cron 中的文件必须只包含格式正确的行,在提交到磁盘之前,crontab 会进行检查。 - Wadih M.

0

将文件名分解并使用q和F选项 file="/etc/crontab"; grep -qF "some_user python /mount/share/script.py" "$file" || echo "*/1 * * * * some_user python /mount/share/script.py"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接