# 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
然后调用