执行crontab 时由于我们编写脚本用的是bash解释器, 而在用脚本自动设定crontab 没有指定bash, 这样会导致系统在执行程序时出现一些未预料的错误.
下面记录一下如何解决这个问题,
安排
crontab 动态添加任务测试过几种方法, 我最喜欢第2种. 因为 SHELL=/bin/bash 会永远在第一行. 而方法1 有可能会把 SHELL=/bin/bash 加到文件末尾,
方法1:
[Bash shell] 纯文本查看 复制代码
( crontab -l 2>/dev/null | grep -v 'SHELL=/bin/'; echo 'SHELL=/bin/bash' ) | crontab -
方法2:
这个方法会先判断一下crontab 中是否指定了SHELL, 如果没有才执行下面的添加命令. 其中的 cron_job 变量是你需要增加的执行命令.
[Bash shell] 纯文本查看 复制代码
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
|