【问题标题】:crontab non executed in dockercrontab 未在 docker 中执行
【发布时间】:2023-01-22 20:35:56
【问题描述】:

我需要在 docker 容器中执行 crontab,所以我创建了以下 dockerfile:

FROM openjdk:11-oraclelinux8

RUN mkdir -p /opt/my-user/
RUN mkdir -p /opt/my-user/joblogs
RUN groupadd my-user && adduser my-user -g my-user
RUN chown -R my-user:my-user /opt/my-user/
RUN microdnf install yum
RUN yum -y update
RUN yum -y install cronie
RUN yum -y install vi
RUN yum -y install telnet
COPY talend /opt/my-user/
COPY entrypoint.sh /opt/my-user/
RUN chmod +x /opt/my-user/entrypoint.sh
RUN chmod +x /opt/my-user/ETLJob/ETLJob_run.sh
RUN chown -R my-user:my-user /opt/my-user/
RUN echo "*/2 * * * * /bin/sh /opt/my-user/ETLJob/ETLJob_run.sh >> /opt/my-user/joblogs/job.log 2>&1" >> /etc/cron.d/my-user-job
RUN chmod 0644 /etc/cron.d/my-user-job
RUN crontab -u my-user /etc/cron.d/my-user-job
RUN chmod u+s /usr/sbin/crond
USER my-user:my-user
ENTRYPOINT [ "/opt/my-user/entrypoint.sh" ]

我的entrypoint.sh 文件如下:

#!/bin/bash
echo "Start cron"
crontab /etc/cron.d/diomedee-job
echo "cron started"

# Run forever
tail -f /dev/null

到目前为止一切顺利,容器已成功创建,当我进入容器并输入crontab -l时,我看到了 crontab...但它从未执行过

我不知道我错过了什么;我所做的任何研究都没有给我任何线索

你能给我点小费吗?

【问题讨论】:

  • 您要在容器内运行的命令是cron(而不是crontab....)。在您最喜欢的搜索引擎中输入“running cron inside docker container”将根据您的具体用例为您提供数十个带有示例的结果

标签: docker cron


【解决方案1】:

Docker 容器通常只托管一个进程。在你的例子中,tail 进程。 cron 守护程序未运行。

您的评论“cron started”似乎表明运行crontab 启动了守护进程,但事实并非如此。

tail -f /dev/null 命令替换为 crond -f 以在前台运行 cron 守护程序,它应该可以工作。

【讨论】:

    猜你喜欢
    • 2015-12-04
    • 2016-04-29
    • 2019-08-14
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    相关资源
    最近更新 更多