Cron 作业在 python:3.7.6-buster (debian) 容器中与 waitress 在后台运行

Cron 作业在 python:3.7.6-buster (debian) 容器中与 waitress 在后台运行

我正在尝试在容器内运行 cron 作业以及女服务员 http 服务器。无论我做什么,似乎都无法让 cron 在容器内自动启动...

这是我的docker文件:

FROM python:3.7.6-buster
RUN apt-get update -y && apt-get install -y python3-dev cron
WORKDIR /home/user

COPY . .
RUN echo "* * * * * root echo hello >> /home/log.log 2>&1\n" > /etc/cron.d/task
RUN chmod 0644 /etc/cron.d/task
RUN crontab /etc/cron.d/task
RUN touch /home/log.log
CMD cron

EXPOSE 80

ENTRYPOINT [ "waitress-serve" ]
CMD [ "-call", "main:main" ]

我也尝试启动 cron 服务,但是当容器启动时,service cron status显示以下内容:

[FAIL] cron is not running ... failed!

我究竟做错了什么?

答案1

Docker 与 VM

您没有在 dockerfile 的任何地方启动 cron。此外,容器不使用 init.d 和 systemd,它们不是虚拟机,也没有自己的 systemd/init.d。这就是您看到以下错误的原因:

[FAIL] cron is not running ... failed!

我的解决方案是编写简单的 bash 脚本(或者只是更改整个 CMD),启动 crond 和其他您想要在后台运行的东西。示例:

crond -P -n -s && waitress-serve -call main:main && tail -f /home/log.log

命令尾部-f是为了防止立即退出你的容器。标志-P -n -s用于从环境继承路径(-P)、将作业输出发送到 syslog(可选,这只是我的偏好)(-s)并在后台工作(-n)。

然后只需复制该脚本并将 CMD 更改为:

CMD script.sh

还要将其添加到您的dockerfile中。这是强制性的-n旗帜。

RUN sed -i '/session    required   pam_loginuid.so/c\#session    required   pam_loginuid.so' /etc/pam.d/crond

我认为现在应该可以了。如果你遇到问题,只需给我留言。这是我的第一个解决方案,所以请耐心等待 :D

相关内容