在 Docker 容器内运行 cron 作业

问题描述 投票:0回答:1

我试图在 Docker 容器中每分钟运行我的 python 程序。为此,我想使用 Python 和 cron 构建映像,然后使用 cron 表达式运行

main.py

您能否查看我的 Dockerfile 并告诉我为什么没有任何内容执行?即使第二个 cron expr (

echo "OK"
) 也没有写入文件(我已将其添加为调试作业)。

所有日志文件都是空的,就像 cron 根本无法工作一样......

顺便说一句。如果我手动运行

/script.sh
(从 docker 容器),我不会收到任何错误,并且新行会添加到
/app/ROOT.log

Dockerfile:

FROM python:3.8-slim-buster

RUN pip install --upgrade pip

RUN apt-get update && apt-get -y install cron
RUN apt-get -y install procps

RUN touch /script.sh
RUN echo "#!/bin/bash" >> /script.sh \
    && echo "" >> /script.sh \
    && echo "cd /app" >> /script.sh \
    && echo "python main.py" >> /script.sh
RUN chmod +x /script.sh
RUN (crontab -l ; echo "*/1 * * * * /bin/bash /script.sh >/app/cron.log 2>&1") | crontab
RUN (crontab -l ; echo "*/1 * * * * echo \"OK\" >>/app/cron.log 2>&1") | crontab
RUN chown app:app /script.sh && chown -R app:app /var/spool/cron/crontabs
RUN touch /var/log/cron.log

WORKDIR /app

# copy requirements.txt file from local (source) to file structure of container (destination) 
COPY requirements.txt requirements.txt

# Install the requirements specified in file using RUN
RUN pip3 install -r requirements.txt

# copy all items in current local directory (source) to current container directory (destination)
COPY main.py main.py

CMD /etc/init.d/cron start && tail -f /var/log/cron.log

main.py

if __name__ == '__main__':
    from datetime import datetime
    # save current date time to file
    with open('/app/ROOT.log', 'a') as f:
        f.write(str(datetime.now()) + '\n')
root@86bbd19a7cb1:/app# ps aux | grep cron
root         1  0.0  0.0   2384   756 ?        Ss   12:49   0:00 /bin/sh -c /etc/init.d/cron start && tail -f /var/log/cron.log
root        11  0.0  0.0   7260  2056 ?        Ss   12:49   0:00 /usr/sbin/cron
root        12  0.0  0.0   4076   744 ?        S    12:49   0:00 tail -f /var/log/cron.log
root        38  0.0  0.0   4832   876 pts/0    S+   12:54   0:00 grep cron
root@86bbd19a7cb1:/app# ls /var/log/
alternatives.log  apt  btmp  cron.log  dpkg.log  exim4  faillog  lastlog  wtmp
root@86bbd19a7cb1:/app# cat /var/log/cron.log
root@86bbd19a7cb1:/app# cat /var/log/lastlog
root@86bbd19a7cb1:/app# cat /var/log/faillog
python docker cron
1个回答
0
投票

在您的脚本中,您指的是

/app
文件夹 (
/app/cron.log
)

但是您正在检查的文件位于

/var/log/
(
/var/log/cron.log
)

© www.soinside.com 2019 - 2024. All rights reserved.