我在尝试通过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/