解決方法:1、排查容器內“/etc/init.d/crond status”是否為running狀態;2、修改“/etc/pam.d/crond”文件,將其中的“required”修改為“sufficient”;3、利用“/etc/init.d/crond restart”重新啟動crond服務即可。
本教程操作環境:linux7.3系統、docker19.03版、Dell G3電腦。
docker怎么解決crontab不生效
在docker中默認使用centos鏡像,在該鏡像中沒有安裝crond,通過yum安裝成功后,crontab沒有生效。
1、首先排查容器內 /etc/init.d/crond status 是否為running狀態。
如果通過第一步還無法解決,參考下面的辦法:
2、修改/etc/pam.d/crond文件,將其中的required改為sufficient,然后重啟crond服務:/etc/init.d/crond restart
注意:在centos7的基礎鏡像里面好像沒有該問題。
擴展知識
最早解決方案
? ?1、在宿主機里面
???????1?3??*?*?*?root??cd?/data/wwwroot/xxx?&&?docker-compose?exec?app?php?think?xxx?>>?/var/log/crontab_xxx.log
? docker-compose exec app php think xxx一直執行不成功
? ?2、然后在容器里面安裝crontab,還是執行不成功,關鍵還沒有相關日志。檢查crontab也是啟動的。 /etc/init.d/cron status
? ?3、裝上rsyslog, apt-get install rsyslog, service rsyslog start
? ?查看 /var/log/syslog
Dec?25?09:07:07?1a8e4fd5c766?crontab[15120]:?(root)?BEGIN?EDIT?(root) Dec?25?09:07:34?1a8e4fd5c766?crontab[15120]:?(root)?REPLACE?(root) Dec?25?09:07:34?1a8e4fd5c766?crontab[15120]:?(root)?END?EDIT?(root) Dec?25?09:08:01?1a8e4fd5c766?cron[15100]:?(root)?RELOAD?(crontabs/root) Dec?25?09:08:01?1a8e4fd5c766?CRON[15133]:?Cannot?make/remove?an?entry?for?the?sp
? ?4、修改/etc/pam.d/cron
? ?注釋掉 session? ? required? ? ?pam_loginuid.so
? 5、重啟cron,運行成功
還有就是,將這一行添加到dockerfile中
RUN?sed?-i?'/session????required???pam_loginuid.so/c#session????required???pam_loginuid.so'?/etc/pam.d/crond
?crontab執行還遇到了一個坑,手動執行腳本沒有問題,因為讀取了環境變量,php要寫絕對路徑
?/usr/local/bin/php?think?xxx
推薦學習:《docker視頻教程》