【问题标题】:My docker container's crontab doesn't seem to be running我的 docker 容器的 crontab 似乎没有运行
【发布时间】:2020-10-08 04:42:09
【问题描述】:

我对 Docker 还很陌生,所以请多多包涵:

我有 5 个 Java 应用程序的集合,我试图在 docker 容器内运行(通过容器内的 cronjobs)。

我还创建了我的 Dockerfile 和一个 docker-compose 文件。我能够启动我的 docker 容器,并且能够在容器内手动运行我的应用程序。问题是,它似乎没有通过 cron 运行我的东西。为了测试,我添加了一个 cron 条目,每分钟将 hello world 回显到一个文件中。它似乎没有运行。这是我的文件:

Dockerfile

FROM ubuntu:latest
ENV LANG C.UTF-8
ENV TZ=EST
ENV DEBIAN_FRONTEND=noninteractive 
RUN mkdir -p /wrds/ingesters/logs

WORKDIR /wrds/ingesters

RUN apt-get update && apt-get install -y  \
    tzdata \
    apt-utils \
    cron \
    default-jdk \
    bash \
    postgresql \
    bsd-mailx \
    postfix \
    vim

COPY *.jar /wrds/ingesters/
COPY run* /wrds/ingesters/
COPY *.properties /wrds/ingesters/

ADD ingester_cron /etc/cron.d/root
RUN chmod 0644 /etc/cron.d/root
RUN touch /var/log/cron.log
RUN crontab /etc/cron.d/root

RUN mkfifo /var/spool/postfix/public/pickup

RUN echo 'alias ll="ls -la"' >> ~/.bashrc
RUN echo 'stty erase ^H' >> ~/.bashrc

CMD cron -L15 && tail -f /var/log/cron.log

docker-compose.yml(出于安全问题,我将所有大写的内容都删掉了)

version: '3.5'
services:
  wrds_hylo_db_ingesters:
    image: HOSTNAME/wrds/CONTAINERNAME
    container_name: CONTAINERNAME
    restart: always
    env_file: env.dev-v2
    volumes:
      - /ingester_logs:/wrds/ingesters/logs
    pid: host

ingester_cron

0 17 * * 1 root /wrds/ingesters/run_script1
0 20 * * 1 root /wrds/ingesters/run_script2
0 23 * * 1 root /wrds/ingesters/run_script3
0 2 * * 2 root /wrds/ingesters/run_script4
* * * * * root echo "Hello World" >> /var/log/cron.log 2>&1

当我运行我的 docker 容器和 ssh 时,我得到以下信息:

root@1b0d719feada:/var/log# service cron status
 * cron is running
crontab -l
0 17 * * 1 root /wrds/ingesters/run_script1
0 20 * * 1 root /wrds/ingesters/run_script2
0 23 * * 1 root /wrds/ingesters/run_script3
0 2 * * 2 root /wrds/ingesters/run_script4
* * * * * root echo "Hello World" >> /var/log/cron.log 2>&1

任何帮助将不胜感激!

【问题讨论】:

    标签: docker cron


    【解决方案1】:

    也许你看看日志。也许你可以看到更多你的 crons 正在做什么。

    Cron:*/3 * * * * YOUR-CRON_BLABLA > /dev/stdout 记录到容器输出

    例如:docker-compose logs -f

    我像这样加载我的 cron 作业:

    COPY ./MY-CRON-FILE.cron /
    
    RUN crontab /tmp/MY-CRON-FILE.cron
    
    ...
    
    

    取决于应用程序,有时也有特定用户:

    RUN crontab -u MY-USER /MY-CRON-FILE.cron
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 2019-03-17
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多