# must be ended with a new line "LF" (Unix) and not "CRLF" (Windows)
* * * * * echo "Hello world" >> /var/log/cron.log 2>&1
# An empty line is required at the end of this file for a valid cron file.
FROM ubuntu:latest
MAINTAINER docker@ekito.fr
RUN apt-get update && apt-get -y install cron
# Copy hello-cron file to the cron.d directory
COPY hello-cron /etc/cron.d/hello-cron
# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/hello-cron
# Apply cron job
RUN crontab /etc/cron.d/hello-cron
# Create the log file to be able to run tail
RUN touch /var/log/cron.log
# Run the command on container startup
CMD cron && tail -f /var/log/cron.log
接受的答案在生產環境中可能是危險的。
當您使用
CMD cron && tail -f /var/log/cron.log
時,cron進程基本上會分叉以便在後台執行cron
,主進程退出並讓您在前台執行tailf
。後台 cron 進程可能會停止或失敗,您不會注意到,您的容器仍將靜默運行,並且您的編排工具不會重新啟動它。使用基本的 shell 重定向,您可能想要執行以下操作:
你的 CMD 將會是:
CMD ["cron", "-f"]
#但是:如果你想執行任務 作為非根用戶。
您可以將
crontab
複製到映像中,以便從該映像啟動的容器執行該作業。重要:如docker-cron 問題 3:對
cron
檔案使用 LF,而不是 CRLF。請參考使用Docker 執行cron 作業」 /github.com/julienboulay" rel="noreferrer">Julien Boulay 在他的Ekito/docker -cron:
如果您想知道
2>&1
是什麼,Ayman Hourieh 解釋。但是:如果
cron
死亡,容器繼續執行。(請參閱 Gaafar 的 評論和如何讓
apt-get
安裝時噪音較小?:apt-get -y install -qq --force-yes cron
也可以工作)如 Nathan Lloyd 在 評論:
或者,確保您的作業本身直接重定向到 stdout/stderr 而不是日誌文件,如 hugoShaka 中所述的答案:
將最後一個 Dockerfile 行替換為
但是:如果你想執行任務 作為非根用戶。
另請參閱(關於
cron -f
,即cron「前台」)「docker ubuntucron -f
不起作用」建置並運行它:
Eric 在評論中添加了:
請參閱「docker CMD」末端的
tail -f
”末尾的輸出> 未顯示
」。請參閱「
在Docker 中執行Cron」以了解更多資訊(2021 年4 月)來自Jason Kulatunga,因為他評論如下
檢視 Jason 的映像
AnalogJ/docker-cron
基於:Dockerfile 安裝
cronie
/crond
,取決於發行版。入口點初始化
/etc/environment
然後呼叫