cron作业未在docker容器中执行
把以前对这个问题的各种答案整合起来,我仍然失败。这是我的Dockerfile:cron作业未在docker容器中执行,docker,cron,Docker,Cron,把以前对这个问题的各种答案整合起来,我仍然失败。这是我的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
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
这是条目。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所有
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,因此推测正常。我做错了什么?仅通过阅读少量文档,它不支持任何点和后缀,如.txt,其路径直接位于/etc下/ 从文件: /etc/cron.d/将所有脚本放在这里,并从/etc/crontab文件调用它们
cron守护进程是否实际运行?您可能应该将
crond
,而不是tail
,作为主容器进程,这涉及直接将其作为前台进程运行,而不是通过服务启动它。(我怀疑您启动了cron,然后又进行了一些修复以使其工作。)事实上,我使用服务cron start
启动cron。当我以交互方式查询它时,我得到服务cron正在运行的响应。我也需要运行crond吗?不需要。如果服务cron status
显示[OK]
,则它正在运行。不需要克洛德。好吧,我知道了。对于我的配置,您的答案部分适用。实际上,/etc/crontab下的文件名称中不能有点,因此我将我的文件重命名为mycrontab
。但是,我不必更改/etc/crontab
。看,我很高兴这有助于找到正确的方法。是的,我明白你的意思,所以基本上任何名字都可以,只接受点和后缀。我还对我的答案做了一点修改,以供将来的用户使用。