我编写了这个可重现的存储库来使用 docker 运行 cron 作业。使用命令
docker compose build && docker compose up
运行它。它会自行重新启动,并且不会按预期每分钟打印“Hello world”。
https://github.com/brunolnetto/cron-docker
谢谢所有的鱼!
您遇到的第一个问题是,要保持
cron
命令运行,您应该添加 -f
选项。但是当你这样做时,会发生一些奇怪的事情,它假设 crond
守护进程正在运行,并尝试使用 /var/run/crond.pid
查找它的 PID。 crond 未运行,因此 cron
命令失败。
这可能与您将配置文件标记为可执行文件有关,即使它不是脚本。
摆弄你的 Dockerfile 后,我制作了这个可以运行的 Dockerfile。
FROM ubuntu:latest
WORKDIR /app
RUN apt-get update && apt-get -y install cron
RUN echo '* * * * * echo "Hello world" >> /var/log/cron.log 2>&1' > cron-config
RUN crontab cron-config
RUN touch /var/log/cron.log
CMD cron -f