【注意】最后更新于 August 18, 2020,文中内容可能已过时,请谨慎使用。
先简要说一下发生的问题吧,因昨日(2020年08月17日)升级 docker-compose
后,导致没有将 docker-compose
添加进环境变量,所以 crontab
再执行执行时找不到 docker-compose
导致无法进入容器,从而无法执行 php artisan
的命令,最终我司脚本服务器停摆问题。
排查过程
1
2
3
4
5
| ## 查看计划任务
crontab -e
## 将执行的机会任务输出到指定 log 文件
* * * * * /root/ga-shell/script-shell.sh >> /var/log/crontab-run.log 2>&1
|
1
2
3
4
5
| ## 查看
cat /root/ga-shell/script-shell.sh
#!/bin/bash
cd /usr/wwwroot/ga-docker-image/ && docker-compose exec php-fpm-71 php /data/www/neox-script/artisan schedule:run
|
1
2
3
4
| 1 /root/ga-shell/script-shell.sh: line 3: docker-compose: command not found
2 /root/ga-shell/script-shell.sh: line 3: docker-compose: command not found
3 /root/ga-shell/script-shell.sh: line 3: docker-compose: command not found
4 /root/ga-shell/script-shell.sh: line 3: docker-compose: command not found
|
原因与解决
可以明显得知,是 docker-compose
可执行文件找不到导致,
解决方式,docker-compose
使用绝对路径即可,如下:
1
2
3
4
| cat /root/ga-shell/script-shell.sh
#!/bin/bash
cd /usr/wwwroot/ga-docker-image/ && /usr/local/bin/docker-compose exec php-fpm-71 php /data/www/neox-script/artisan schedule:run
|
继续等待脚本执行,看 log 结果如下:
1
2
3
4
5
| 8 the input device is not a TTY
9 the input device is not a TTY
10 the input device is not a TTY
11 the input device is not a TTY
12 the input device is not a TTY
|
问题原因,通过查找得知,是某些版本的 docker-compose
问题,解决方式:docker-compose exec -T
添加 -T
参数解决。
参考如下:
完整的 shell 如下:
1
2
3
4
| cat /root/ga-shell/script-shell.sh
#!/bin/bash
cd /usr/wwwroot/ga-docker-image/ && /usr/local/bin/docker-compose exec -T php-fpm-71 php /data/www/neox-script/artisan schedule:run
|
The end!