从脚本向 cron 添加行

Ada*_*tan 45 scripts cron automation

有没有办法通过脚本向用户的 cron 添加行?

我通常使用crontab -e,但我想使用 shell 脚本自动执行此任务。

Ric*_*way 59

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

#!/bin/bash

line="* * * * * /path/to/command"
(crontab -u $(whoami) -l; echo "$line" ) | crontab -u $(whoami) -
Run Code Online (Sandbox Code Playgroud)

  • 哦,我认为如果该用户的 `crontab` 还不存在,这也会出错(?) (14认同)
  • 它警告您用户 crontab 不存在,如果是这种情况,但它会创建它。我赞成你的评论很有见地。 (8认同)

fbi*_*nel 5

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

$ crontab -l | sed -e 's/foo/bar/' | crontab -
Run Code Online (Sandbox Code Playgroud)

显然你需要小心你的替换,以确保它只匹配你想要改变的行;否则全部foos更改为bars(在本例中)。

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

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

2 * * * * /sbin/flitch --days 3,4 > /var/log/flitch.out 2>&1
Run Code Online (Sandbox Code Playgroud)

假设这一行是在许多行中,或者您有许多不同的 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
...
Run Code Online (Sandbox Code Playgroud)

现在我必须承认,几乎 100% 的时间sed都会做ed会做的事情,但是在瑞士军刀上多加一个工具总是好的。^.^