从脚本向cron添加行


Answers:


49

您可以像这样将行回显到当前用户crontab的底部:

#!/bin/bash

line="* * * * * /path/to/command"
(crontab -u userhere -l; echo "$line" ) | crontab -u userhere -

+1因为您击败了我(测试:D时出现脚本错误)。我需要添加1件事:系统需要通知cron已更改。
Rinzwind

我知道这将是一场竞赛!您是正确的,确实需要通知cron。这就是为什么您不能仅将命令回显到crontab的末尾。我已经测试了上面的脚本可以正常工作,并且cron开始运行命令。
理查德·霍洛威

13
哦,我认为如果crontab该用户还不存在,也会出错(?)
Rinzwind 2011年

7
它会警告您用户crontab不存在(如果是这种情况),但是它将创建它。我赞成您的评论有见地。
理查德·霍洛威

3

如果要在crontab中编辑值,可以执行以下操作:

$ crontab -l | sed -e 's/foo/bar/' | crontab -

显然,您需要谨慎进行替换,以确保它仅与要更改的行匹配;否则将全部foos更改为bars(在此示例中)。

这种方法的优点是您不必替换整个crontab。(比喻用镊子而不是大锤。)

您可以使用任何编辑命令来代替sed。例如,如果您想使用ed修饰看起来像这样的一行:

2 * * * * /sbin/flitch --days 3,4 > /var/log/flitch.out 2>&1

说这行是很多行中的一员,或者您有许多不同的crontabs在不同的系统上进行更新,并且您只知道您的行将是其中唯一包含该术语的行flitch

它可能看起来像:

$ cat /tmp/edscript
/flitch
s/3/9/
w
q
$ crontab -l > /tmp/out && ed /tmp/out < /tmp/edscript && crontab - < /tmp/out
$ crontab -l
...
2 * * 1 * /sbin/flitch --days 9,4 > /var/log/flitch.out 2>&1
...

现在,我必须承认,sed几乎有100%的时间会完成ed会做的事情,但是在瑞士军刀上使用额外的工具总是很好。^。^

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.