繁体   English   中英

Cron 作业不会在 Docker 容器内自动运行

[英]Cron job not auto runs inside a Docker container

我有一个带主管的 LAMP 容器。

我添加了一个简单的 cron

* * * * * root /bin/date >> /var/log/cron.log

从我的 Dockerfile

ADD ./crons/test /etc/cron.d/test RUN chmod 0777 /etc/cron.d/test

我通过主管启动 cron 并使用一个supervisor-cron.conf这样的:

[program:cron]
command=/bin/bash -c "cron -f"
numprocs=1
autostart=true
autorestart=true
startretries=2

Cron 启动良好并保持正常运行。 奇怪的是,没有 cronjob 自动运行 [它应该] 但是当我执行docker exec lamp crontab /etc/cron.d/test ,cron 作业开始并按预期工作。

我错过了什么吗? 我在任何地方都读到过 cron 作业是由 cron 自动执行的。

我解决了。

我尝试在 /etc/crontab 和 /etc/cron.d/ 中设置它们。

Cron 没有自动启动 cron 作业。

但是,当我运行docker exec lamp crontab /etc/cron.d/my_cronjob_file一切都很好。 这让我怀疑,然后我读到了这个 因此,在容器中添加 my_cronjob_file 后 [在 dockerfile] 我添加了RUN crontab /etc/cron.d/my_cronjob_file 这实质上是将 cronjob“安装”到 crontab 表。 [我不知道 cron/tab 的内部结构,但这是我理解的要点。] 。

之后,cron 服务由主管启动,cronjob 运行起来很迷人。

这可以通过 bash 文件解决,由于 Docker 的分层架构,cron 服务不会通过 RUN/CMD/ENTRYPOINT 命令启动。

只需添加一个 bash 文件,它将启动 cron 和其他服务(如果需要)

文件

FROM gradle:6.5.1-jdk11 AS build
# apt
RUN apt-get update
RUN apt-get -y install cron
# Setup cron to run every minute to print (you can add/update your cron here)
RUN touch /var/log/cron-1.log
RUN (crontab -l ; echo "* * * * * echo testing cron.... >> /var/log/cron-1.log 2>&1") | crontab
# entrypoint.sh
RUN chmod +x entrypoint.sh
CMD ["bash","entrypoint.sh"]

入口点.sh

#!/bin/sh
service cron start & tail -f /var/log/cron-2.log

如果还需要任何其他服务与 cron 一起运行,则在同一命令中使用&添加该服务,例如: /opt/wildfly/bin/standalone.sh & service cron start & tail -f /var/log/cron-2.log

一旦您进入 docker 容器,您就可以看到testing cron....将每分钟在文件中打印一次: /var/log/cron-1.log

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM