我在尝试通过Docker设置和运行某些cron作业时遇到了一些问题-它可能与我正在使用的基本镜像有关,但是我不确定,对此我有些困惑。

以下是我的Dockerfile的外观:

FROM wordpress:php7.1-apache

# Remove wp image cache
RUN rm -rf /usr/local/etc/php/conf.d/opcache-recommended.ini \
&& apt update \
&& apt install wget -y \
&& apt-get -y install cron

ADD ./docker/local/crontab /etc/cron.d/mycron
RUN chmod +x /etc/cron.d/mycron
RUN crontab /etc/cron.d/mycron
RUN service cron reload
RUN service cron restart

COPY ./wp-config.php /var/www/html/wp-config.php
COPY ./.htaccess /var/www/html/.htaccess
COPY ./theme /var/www/html/wp-content/themes/paper

RUN chown -R www-data:www-data /var/www

当我使用docker-compose构建此镜像时,一切正常,网站运行正常。但是,cron作业没有运行。如果我登录到容器并输入crontab -l
它完全按照mycron文件列出了cron作业
* * * * * root wget -O- "http://url.to/script/file.php" >> /var/log/script1.log
* * * * * root wget -O- "http://url.to/script/file2.php" >> /var/log/script2.log

但是cron作业无法运行。并且未创建日志文件。

但是,当我键入crontab -e并进行任何更改后,保存并退出,然后键入service cron restart
cron作业开始运行,并创建了日志文件。

最佳答案

好的,所以我通过以下操作对其进行了修复-不知道这是否是正确的方法...

我的Dockerfile的结尾看起来像这样。

ADD ./docker/local/mycron /etc/cron.d/mycron
COPY ./docker/local/all.env /root/all.env

ADD ./docker-entrypoint.sh /usr/local/bin/init.sh
RUN chmod +x /usr/local/bin/init.sh
ENTRYPOINT ["init.sh"]
CMD ["apache2-foreground"]

然后,在(docker-entrypoint.sh文件)的顶部-现在为init.sh
chmod +x /etc/cron.d/mycron
crontab /etc/cron.d/mycron
service cron reload
service cron restart
chmod +x /var/www/html/path.to.cron.sh

与cron文件看起来像
0,30 * * * * /var/www/html/path.to.cron.sh

如果存在环境变量不存在的问题,那是因为crontab是在不同的环境下执行的,因此您需要通过传入环境var文件,以句号开头来表示“执行”来执行cron。 。
0,30 * * * * . /root/all.env; /var/www/html/path.to.script.php

确保不仅在小时主机服务器上,而且还在容器内,都设置正确的时区。

它可能有点复杂,但是对我有用。如果您有任何问题,请告诉我。

关于docker - 通过Dockerfile创建Cron作业,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47256287/

10-12 05:30