【问题标题】:can't run cron message inside alpine docker file无法在 alpine docker 文件中运行 cron 消息
【发布时间】:2021-02-07 16:23:27
【问题描述】:

我正在尝试在 docker 容器中启动一个简单的 chron 消息来测试 chron:

在我的 php-fpm Dockerfile 中:

...

RUN echo "*       *       *       *       *       run-parts /etc/periodic/1min" >> /etc/crontabs/root

RUN mkdir /etc/periodic/1min

COPY cronscript.sh /etc/periodic/1min

RUN chmod a+x /etc/periodic/1min/cronscript.sh

RUN dos2unix /etc/periodic/1min/cronscript.sh

...

CMD [ "crond", "-l", "2", "-f" ]; composer install ; wait-for-it database:3306 -- bin/console doctrine:migrations:migrate ;  php-fpm;

我的 cronscript.sh :

#!/usr/bin/env sh
echo "My test message"

当我在容器内运行crontab -e 时:

当我运行容器时,我没有收到消息:

如何正确地每 1 分钟显示一次消息?

【问题讨论】:

    标签: linux docker docker-compose cron


    【解决方案1】:

    您确定将 cron 作业添加到计划中吗?

    1. 尝试在 Docker 映像之外定义您的作业,例如 cron.txt
      * * * * * xxx xxx
      
    2. 使用 Dockerfile 中的ADD 命令将计划添加到映像
      ADD cron.txt /etc/crontabs/xxx
      

    【讨论】:

    • 你好,在我的 docker 文件中我使用这个命令:RUN echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root,然后我复制1min 文件夹中的脚本,我应该将脚本复制到 docker 映像之外吗?
    • 是的。如果您想向 docker 镜像添加自定义文件,您应该使用 ADD 或 COPY docker 命令(这是它们之间的区别stackoverflow.com/a/24958548/6916890)。
    • 在我的情况下它可以工作,该应用程序的生产时间超过 4 年。请确保使用 ADD 命令将作业放置在正确的位置,并且 cron 本身在 ENTRYPOINT/CMD 中启动。
    • 如何验证 cron 本身是否在 ENTRYPOINT/CMD 中启动
    【解决方案2】:

    Dockerfile

    FROM alpine
    
    # Copy script which should be run
    COPY ./yourscript /usr/local/bin/yourscript
    # Run the cron every minute
    RUN echo '*  *  *  *  *    /usr/local/bin/yourscript' > /etc/crontabs/root
    
    CMD ['crond', '-l 2', '-f']
    

    Script

    #!/bin/sh
    echo "My test message" >> /dev/stdout
    

    【讨论】:

    • 你好,这一行已添加到我的 crontab 中,当我运行 crontab -e 时,我得到了这一行: * * * * * /usr/local/bin/script ,但我没有收到任何消息,看起来 cron 不起作用
    猜你喜欢
    • 2019-05-26
    • 2021-12-04
    • 2021-09-27
    • 1970-01-01
    • 2018-08-25
    • 2017-07-24
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多