Docker:容器内的cron没有错误,但仍然不工作



我是新手。设法创建一个脚本,从网上获取信息,并填充一个SQL数据库。

但是,我需要让它每分钟运行一次。

所以我修改了我的工作Dockerfile并添加了以下内容:

Dockerfile:

RUN apt-get install -y cron
COPY cronms /etc/cron.d/cronms
RUN chmod 0644 /etc/cron.d/cronms
RUN crontab /etc/cron.d/cronms
RUN touch /var/log/cron.log

CMD cron && tail -f /var/log/cron.log
#CMD [ "python3", "./my_script.py" ]  -- command before cron

my cronms file:

*/1 * * * * /usr/bin/python3 /my_script.py

映像构建时没有错误,但是运行时没有下载数据。

我错过了什么?

感谢

您的crontab文件语法不正确。来自cron手册页:

系统crontab (/etc/crontab)和包crontabs (/etc/cron.d/*)使用相同的格式,不同之处在于命令的用户名在时间和日期字段之后和命令之前。

所以你的cronms文件应该看起来像:

*/1 * * * * root /usr/bin/python3 /my_script.py

我假设你的问题中的Dockerfile被截断了,但值得注意的是,要做到这一点,你可能需要显式地安装python3cron,这取决于你使用的是哪个基本映像。


如果我使用Dockerfile:

FROM ubuntu:20.04
RUN apt-get update
RUN apt-get install -y cron python3
COPY cronms /etc/cron.d/cronms
RUN chmod 0644 /etc/cron.d/cronms
RUN crontab /etc/cron.d/cronms
RUN touch /var/log/cron.log
COPY my_script.py /my_script.py
CMD cron && tail -f /var/log/cron.log

And thiscronms:

*/1 * * * * root /usr/bin/python3 /my_script.py

And thismy_script.py:

#!/usr/bin/python3
import time
with open("/tmp/datafile", "a") as fd:
fd.write(time.ctime())
fd.write("n")

然后我可以确认一切工作如预期:脚本是每分钟执行一次。

注意没有写入/var/log/cron.log,因为cron的日志是syslog,而不是文件。要查看在cron中,您需要安排运行一个syslog守护进程,或者使用不同的cron守护进程(例如,busyboxcrond命令可以日志到文件或标准错误。

相关内容

最新更新