在一个码头工人的容器上的cron laravel不工作

时间:2017-05-25 21:42:48

标签: laravel docker cron

我有一个容器用于我的laravel应用程序,php:7.0.4-fpm作为基本图像。

这是我的dockerfile:

FROM php:7.0.4-fpm

RUN apt-get update && apt-get install -y cron nano libmcrypt-dev \
    mysql-client libmagickwand-dev --no-install-recommends \
    && pecl install imagick \
    && docker-php-ext-enable imagick \
    && docker-php-ext-install mcrypt pdo_mysql

COPY . /var/www

ADD crontab /etc/cron.d/laravel-cron

RUN chmod 0644 /etc/cron.d/laravel-cron

RUN touch /var/log/cron.log

RUN /usr/bin/crontab /etc/cron.d/laravel-cron

RUN cron
  1. Cron没有运行,我必须在容器中使用ssh来启动它。
  2. 当我手动启动时,它适用于简单的事情,比如每分钟回复文本。但不适用于 php artisan schedule:run 命令。在日志中我看到:

    运行预定命令:'/ usr / local / bin / php''artisan' 错误:插入> '/ dev / null'2>& 1

  3. 错误:插入是我的任务的名称,但网站上没有任何更新。

    1. 这很奇怪,因为当我运行 php artisan schedule:运行命令时,它可以在网站上运行。
    2. 所以我的问题是:如何让cron在docker容器上工作以执行php artisan schedule:run命令?最好用dockerfile编写,而不是通过ssh手动编写。

      我也从容器中收到一条奇怪的消息:

      ALERT: oops, unknown child (5094) exited with code 1.
      Please open a   bug report (https://bugs.php.net).
      

1 个答案:

答案 0 :(得分:0)

另一种解决方案是与主管一起运行 php artisan schedule:run。就我而言,我在 [项目根目录]/.docker/php/workers 中有一个 schedule-run.conf:

[program:schedule-run]
process_name=%(program_name)s_%(process_num)02d
command=/bin/bash -c "while [ true ]; do (php /var/www/html/artisan 
schedule:run --verbose --no-interaction &); sleep 60; done"
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/html/storage/logs/schedule.log
stopwaitsecs=60
  • 将您的 apt-get install -y cron 替换为 apt-get install -y supervisor
  • ADD .docker/php/workers /etc/supervisor/conf.dCMD ["/usr/bin/supervisord"] 添加到您的 Dockerfile。