【发布时间】:2020-01-18 00:19:32
【问题描述】:
将来自该主题的各种先前答案的解决方案放在一起,但我仍然失败了。这是我的 Dockerfile:
FROM python:3.7
RUN apt-get update &&\
apt-get install -y cron &&\
apt-get clean
# do this now to use layer cache mechanism
COPY requirements.txt /
RUN pip install -r /requirements.txt
RUN mkdir -p /usr/local/src/app
WORKDIR /usr/local/src/app
ADD script .
ADD StockLogger.py .
ADD crontab.txt .
COPY entry.sh .
RUN chmod 755 script entry.sh && touch /var/log/cron.log
CMD ./entry.sh && tail -f /var/log/cron.log
这里是entry.sh
#!/bin/sh
set -e
# start cron
service cron start
cp ./crontab.txt /etc/cron.d/
#fix link-count, as cron is being a pain, and docker is making hardlink count >0 (very high)
touch /etc/crontab /etc/cron.*/*
echo Added crontab
whoami
echo ***entry.sh done***
这里是 crontab.txt
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * root echo "Hello world" >> /var/log/cron.log 2>&1
# Keeping the empty next line
当我使用docker run sprevrha/crontester:latest 运行容器时,CMD 中的tail -f 使其运行良好,但不会产生任何输出。当我执行到正在运行的容器中并使用 cat 检查它时,该文件也是空的。此外,crontab -l 表示 root 没有 cron 作业。 /etc/cron.d/crontab.txt 在那里,它归根用户所有。
root@16d01a1a2c0c:/usr/local/src/app# ls -l /etc/cron.d
total 4
-rwxr-xr-x 1 root root 1020 Jan 7 21:20 crontab.txt
链接数为 1,所以大概没问题。
我做错了什么?
【问题讨论】:
-
cron 守护进程是否真的在运行?您可能应该让
crond,而不是tail,成为主容器进程,这涉及直接将其作为前台进程运行,而不是通过service启动它。 (我怀疑你启动了 cron,然后做了一些修复以使其工作。) -
确实,我以
service cron start开始cron。当我以交互方式查询它时,我得到服务 cron 正在运行的响应。我还需要运行 crond 吗? -
不。如果
service cron status说[OK],它正在运行。不需要 crond。