Docker Alpine镜像中Supervisord运行Cron无输出故障排查
问题排查与修复方案
1. Crontab时间字段格式错误
你的crontab.txt里写了6个时间字段:
*/10 * * * * * bash ./run.sh >logs.log 2>&1
标准crontab格式是5个字段(分 时 日 月 周),多出来的最后一个星号属于无效配置,会导致任务无法被正确识别触发。修正后应为:
*/10 * * * * bash /opt/app-root/src/run.sh >/opt/app-root/src/logs.log 2>&1
2. Run.sh脚本语法错误
run.sh里的命令替换反引号未闭合:
#!/bin/bash echo `date +%Y%m%d_%H%M%S
末尾缺少配对的反引号,会直接导致脚本执行失败,修正后:
#!/bin/bash echo `date +%Y%m%d_%H%M%S` # 更推荐可读性更好的$()写法: # echo $(date +%Y%m%d_%H%M%S)
3. 相对路径导致的文件找不到问题
Cron任务的默认工作目录并非你在Dockerfile中设置的/opt/app-root/src,使用./run.sh和logs.log这类相对路径时,cron会找不到脚本文件,也无法正确写入日志。必须改用绝对路径,如上述修正后的crontab命令所示。
4. Alpine Crond日志调试优化(可选)
Alpine自带的crond默认日志级别较低,你可以在supervisord配置中添加日志参数,方便后续排查问题:
[program:cron] command=crond -f -l 2 user=root autostart=true autorestart=true
内容的提问来源于stack exchange,提问作者bruvio
相关产品推荐
相关产品推荐

