从脚本向 cron 添加行

从脚本向 cron 添加行

有没有办法通过脚本向用户的 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会做什么编辑可以,但瑞士军刀上多备一个工具总是好的。^.^

相关内容