手动运行正常的Shell脚本无法通过cron执行,请求排查帮助
手动运行正常的Shell脚本无法通过cron执行,请求排查帮助
我遇到了一个棘手的问题:通过sudo crontab -e配置的root定时任务,对应的备份验证脚本手动执行完全正常,但cron自动执行后,关键步骤却没生效,麻烦大家帮忙排查一下问题所在。
我的crontab配置:
# m h dom mon dow command 40 4 * * * /bin/bash /usr/bin/verify-miab-backup.sh
对应脚本内容(/usr/bin/verify-miab-backup.sh):
#!/bin/bash echo `date` > /home/mythbuntu/last_verify_miab_run.log echo `id -u -n` >> /home/mythbuntu/last_verify_miab_run.log export PASSPHRASE=$(cat /dozer/eandb/miab_22-04/secret_key.txt) duplicity verify --log-file=/var/log/duplicity_backblaze_verify.log file:///dozer/eandb/miab_backblaze_backups/ /dev/null && echo "miab_last_verify_time_seconds `date +"%s"`" > /etc/grafana-text-file-collectors/miab_verify.prom
目前排查到的现象:
- 从
/home/mythbuntu/last_verify_miab_run.log的内容来看,cron确实执行了脚本,且是以root身份运行的:
Mon 10 Apr 04:40:01 BST 2023 root
- 但
/etc/grafana-text-file-collectors/miab_verify.prom里的时间戳还是我上周日手动运行的结果,完全没有更新:
miab_last_verify_time_seconds 1681077406
- 手动执行
sudo verify-miab-backup.sh时,所有流程都正常:日志会更新最新时间,prom文件也会写入当前的时间戳,完全符合预期。
我已经尝试过的排查方向:
- 脚本开头添加了
#!/bin/bash,且crontab里也明确指定用/bin/bash运行脚本,避免shell兼容问题 - 脚本和涉及的命令都使用了绝对路径,参考过相关的排查建议
- 查阅过几个常见的「cron脚本失效」问题的帖子,比如环境变量、路径问题,但没找到匹配我情况的点
我怀疑是权限或者cron环境下变量使用的问题,但实在找不到具体出错的地方,有没有大佬能给点思路?
备注:内容来源于stack exchange,提问作者Aaron Whitehouse
相关产品推荐
相关产品推荐

