docker中crontab无法执行

1、下载的镜像是ubuntu最简版,默认没有安装crontab

2、业务需求需要crontab

最早解决方案

   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,运行成功

参考文档:https://blog.csdn.net/u013091013/article/details/70939136

还有就是,将这一行添加到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

  

原文地址:https://www.cnblogs.com/agang-php/p/10175398.html