Ubuntu 21.10 impish下cron无法执行Docker启动命令求助
问题核心原因
cron执行定时任务时的默认PATH环境变量和你交互式登录终端的PATH不一致,找不到docker命令的执行路径,这是90%以上「手动能正常执行的命令在cron中运行失败」的原因。你可以先打开配置的日志文件/home/cronlog.log,里面大概率会打印docker: command not found的报错信息。
解决方法
你可以任选以下任意一种方案调整:
- 方案一:直接在crontab规则中使用docker的绝对路径
先在终端执行which docker获取docker二进制文件的完整路径,常见返回值为/usr/bin/docker或/usr/local/bin/docker,将你的crontab规则修改为对应路径即可:
*/1 * * * * /usr/bin/docker start sender >> /home/cronlog.log 2>&1
- 方案二:调整独立启动脚本的配置
如果要保留用脚本执行的方式,需要做两个调整:
- 给脚本添加可执行权限,确保cron有权限运行脚本:
chmod +x /home/start_container.sh
- 要么在脚本中也使用docker的绝对路径,要么在脚本开头声明完整的PATH变量(可以先执行
echo $PATH拿到你当前终端的PATH值填在这里):
#!/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin docker start sender
- 方案三:在crontab中全局配置PATH
直接在crontab -e编辑的文件最顶部添加PATH声明,和你当前终端的PATH保持一致,后续所有定时规则都可以直接用平时的命令:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin */1 * * * * docker start sender >> /home/cronlog.log 2>&1
内容的提问来源于stack exchange,提问作者NictheDEV
相关产品推荐
相关产品推荐

