[英]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.