【问题标题】:Creating cron jobs via Dockerfile通过 Dockerfile 创建 cron 作业
【发布时间】:2018-04-25 15:51:12
【问题描述】:

我在尝试通过 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 作业开始运行并创建日志文件。

【问题讨论】:

  • 您是否尝试在您的ENTRYPOINT 中添加service cron restart 命令并检查日志文件状态是否有效?
  • 我也遇到了同样的问题,有更新吗?
  • @ccalderon911217 我已经尽我所能回答了.. 但我确实让它工作了..

标签: docker cron debian


【解决方案1】:

好的,所以我通过执行以下操作来修复它 - 不知道它是否正确......

我的 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

确保您设置了正确的时区,不仅是在主机服务器上,而且在容器内也是如此。

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

【讨论】:

  • 谢谢,我昨天通过添加 crontab /path/to/crontab 修复了它
猜你喜欢
  • 1970-01-01
  • 2022-09-25
  • 2021-03-25
  • 1970-01-01
  • 2017-09-14
  • 2013-03-11
  • 2013-08-31
  • 1970-01-01
  • 2012-02-07
相关资源
最近更新 更多