php - Cron 不在 PHP Docker 容器中运行

标签 php docker cron dockerfile containers

我正在使用 php:7.4-fpm Docker 镜像,并且我正在尝试设置 cron 来运行,但它没有运行。

这是我的 Dockerfile:

FROM php:7.4-fpm

# Set working directory
WORKDIR /var/www

# Install dependencies
RUN apt-get update && apt-get install -y \
    cron \
    build-essential \
    libpng-dev \
    libjpeg62-turbo-dev \
    libfreetype6-dev \
    locales \
    libzip-dev \
    libmcrypt-dev \
    libonig-dev \
    zlib1g-dev \
    zip \
    jpegoptim optipng pngquant gifsicle \
    vim \
    unzip \
    git \
    graphviz \
    curl \
    supervisor

# Install Imagick
RUN apt-get update && \
    apt-get install -y libmagickwand-dev --no-install-recommends && \
    pecl install imagick && \
    docker-php-ext-enable imagick

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install extensions
RUN docker-php-ext-install pdo_mysql zip exif pcntl

# Permissions for Laravel
RUN chown -R www-data:www-data /var/www
RUN chmod -R 777 /var/www

# Copy crontab file to the cron.d directory
COPY ./docker/php-server/crontab /etc/cron.d/crontab

# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/crontab

# Apply cron job
RUN crontab /etc/cron.d/crontab

# Create the log file to be able to run tail
RUN touch /var/log/cron.log

EXPOSE 9000

CMD bash -c "cron && php-fpm"

当我进入容器并检查 /etc/cron.d/crontab 的内容时,它是正确的

* * * * * php /var/www/artisan schedule:run >> /var/log/cron.log 2>&1
# An empty line

但它没有运行。我不确定这里发生了什么..

当我运行service cron status时,它显示[ ok ] cron is running。但什么也没有发生。

最佳答案

所以我终于解决了这个问题。我不知道为什么复制 cron 文件不起作用。我还是不知道为什么。 (也许比我聪明的人可以解释一下)。但我通过将命令附加到 /etc/crontab 文件中非常简单地解决了这个问题,现在它可以工作了。

附注crontab 文件需要在末尾添加一个换行符,因此使用 echo 自动添加它。

这是我更新的 Dockerfile(我删除了复制 crontab 的所有其他行):

RUN echo "* * * * * root php /var/www/artisan schedule:run >> /var/log/cron.log 2>&1" >> /etc/crontab

# Create the log file to be able to run tail
RUN touch /var/log/cron.log

关于php - Cron 不在 PHP Docker 容器中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66010850/

相关文章:

NPM 警告 无描述且无存储库字段

linux - bash 脚本中的 sed 输出在 CLI 中有效,在 cron 中输出不同

php - 如果数据库中有3个不同的字段名称,如何搜索全名?

javascript - 需要替换输入数字

php - 在同一服务器上的两个不同文件夹上使用相同的 PHP session

Docker Compose 和 Volumes 问题

mysql - 连接docker容器和mysql

mysql - Docker 无法通过套接字连接到本地 MySQL 服务器

php - 创建二维数组将数据移动到关键位置

Jenkins Cron 表达式未在正确的时间安排