Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cron作业未在docker容器中执行_Docker_Cron - Fatal编程技术网

cron作业未在docker容器中执行

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

把以前对这个问题的各种答案整合起来,我仍然失败。这是我的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
这是条目。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
。看,我很高兴这有助于找到正确的方法。是的,我明白你的意思,所以基本上任何名字都可以,只接受点和后缀。我还对我的答案做了一点修改,以供将来的用户使用。