有没有办法通过脚本向用户的 cron 添加行?
我通常使用来执行此任务crontab -e
,但我想使用 shell 脚本自动执行此任务。
答案1
您可以将该行回显到当前用户 crontab 的底部,如下所示:
#!/bin/bash
line="* * * * * /path/to/command"
(crontab -u $(whoami) -l; echo "$line" ) | crontab -u $(whoami) -
答案2
如果您想编辑 crontab 中的值,您可以执行以下操作:
$ crontab -l | sed -e 's/foo/bar/' | crontab -
显然,您需要小心进行替换,以确保它只匹配您想要更改的行;否则所有内容foos
都会更改为bars
(在此示例中)。
这种方法的优点是您不必替换整个 crontab。(比喻为镊子而不是大锤。)
您可以使用任何编辑命令来代替sed。例如,如果你想使用编辑修饰一条看起来像这样的线:
2 * * * * /sbin/flitch --days 3,4 > /var/log/flitch.out 2>&1
假设这一行是许多行之一,或者您有许多不同的 crontab 需要在不同的系统上更新,并且您只知道您的行将是唯一包含该术语的行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
...
现在我必须承认,几乎 100% 的时间里sed会做什么编辑可以,但瑞士军刀上多备一个工具总是好的。^.^