簡體   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