vsyour 发表于 2022-8-30 14:37

Linux中crontab的shell脚本小技巧--动态添加任务

执行crontab 时由于我们编写脚本用的是bash解释器, 而在用脚本自动设定crontab 没有指定bash, 这样会导致系统在执行程序时出现一些未预料的错误.
下面记录一下如何解决这个问题,

安排

crontab 动态添加任务测试过几种方法, 我最喜欢第2种. 因为 SHELL=/bin/bash 会永远在第一行. 而方法1 有可能会把 SHELL=/bin/bash 加到文件末尾,

方法1:

( crontab -l 2>/dev/null | grep -v 'SHELL=/bin/'; echo 'SHELL=/bin/bash' ) | crontab -



方法2:
这个方法会先判断一下crontab 中是否指定了SHELL, 如果没有才执行下面的添加命令.其中的 cron_job 变量是你需要增加的执行命令.

if ! crontab -l 2>/dev/null | grep 'SHELL=/bin/' >/dev/null 2>&1 ;then
crontab <<-EOF `crontab -l`
SHELL=/bin/bash
$cron_job
EOF
fi

jinhougou 发表于 2022-8-30 14:55

感谢大佬受教了

guohuanxian 发表于 2022-8-30 15:15

过来看看

小蓝人 发表于 2022-8-30 15:15

感谢大佬受教了

Khaoss 发表于 2022-8-30 16:08

感谢大佬,受教受教

爱飞的猫 发表于 2022-8-30 19:50

本帖最后由 爱飞的猫 于 2022-8-30 19:51 编辑

1. 可以直接新建文件到 `/etc/cron.d/文件名`(格式同 `/etc/crontab`),不影响已经定义好的规则。
2. 可以把脚本写到文件系统再使用 bash 执行(如 `bash /opt/my-app/cron/work1.sh`)。后续更新也方便,不需要再改 crontab 文件。

vsyour 发表于 2022-9-1 09:05

爱飞的猫 发表于 2022-8-30 19:50
1. 可以直接新建文件到 `/etc/cron.d/文件名`(格式同 `/etc/crontab`),不影响已经定义好的规则。
2 ...

感谢,非常棒。

skoy03 发表于 2022-9-6 11:25

前来学习了!
页: [1]
查看完整版本: Linux中crontab的shell脚本小技巧--动态添加任务