宿主机crontab执行Docker容器内脚本不生效问题求助
从你提供的docker events日志可以看到exec实例被正常创建后短时间内就退出,可按以下步骤排查修复:
问题排查与修复方案
1. 修正crontab中的docker exec命令参数
crontab运行时无交互式终端,docker exec默认需要伪终端的场景会直接退出,需要添加-i参数,同时指定docker的绝对路径(crontab默认环境变量不包含docker所在路径,会出现找不到命令的问题):
先在宿主机执行which docker获取docker的完整路径,通常为/usr/bin/docker,修改后的定时任务配置如下:
*/1 * * * * root /usr/bin/docker exec -i testsite4 /home/tester.sh
2. 检查容器内脚本配置
- 确认脚本有可执行权限:进入容器执行
chmod +x /home/tester.sh - 确认脚本开头添加了shebang解释器声明,比如首行写
#!/bin/bash - 确认脚本中创建test文件夹使用绝对路径,比如
mkdir -p /home/test,避免相对路径导致文件夹生成到了exec默认的工作目录,而非你预期的路径
3. 前置验证测试
先在宿主机的交互式终端直接执行完整的docker exec命令,确认能正常生成目标test文件夹,手动执行无问题后再放入crontab运行。
4. 增加日志排查
如果修改后还是不生效,可以把定时任务的输出重定向到日志文件,快速定位问题:
*/1 * * * * root /usr/bin/docker exec -i testsite4 /home/tester.sh >> /var/log/tester_cron.log 2>&1
后续直接查看/var/log/tester_cron.log即可看到具体报错信息。
内容的提问来源于stack exchange,提问作者JJMeliodax
相关产品推荐
相关产品推荐

