簡體   English   中英

如何在 docker 容器中運行 cron 作業?

[英]How to run cron job in docker container?

我有一個 python 腳本,用於填充 AWS 中的 Postgres 數據庫。

我可以手動運行它,並且可以毫無問題地將數據加載到數據庫中。 我想在 docker 容器內每 5 分鍾運行一次。

所以我將它包含在 docker 圖像中運行。 但我不確定為什么它沒有運行。 我看不到附加到/var/log/cron.log文件的任何內容。 有人可以幫我弄清楚為什么它沒有運行嗎?

我能夠在 docker 構建期間將腳本復制到圖像並能夠手動運行它。 正在填充數據庫,我得到了預期的 output。

該腳本位於當前目錄中,將被復制到/code/文件夾

這是我的代碼:

Dockerfile:

FROM python:3
RUN apt-get -y update && apt-get -y upgrade
RUN apt-get install -y cron
RUN apt-get install -y postgresql-client
RUN touch /var/log/cron.log
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD . /code/
COPY crontab /etc/cron.d/cjob
RUN chmod 0644 /etc/cron.d/cjob
CMD cron && tail -f /var/log/cron.log

定時任務表:

*/5 * * * * python3 /code/populatePDBbackground.py >> /var/log/cron.log
# Empty line

Crontab需要其他字段:用戶,運行命令:

* * * * * root python3 /code/populatePDBbackground.py >> /var/log/cron.log
# Empty line

Dockerfile是:

FROM python:3
RUN apt-get -y update && apt-get -y upgrade
RUN apt-get install -y cron postgresql-client
RUN touch /var/log/cron.log
RUN mkdir /code
WORKDIR /code
ADD . /code/
COPY crontab /etc/cron.d/cjob
RUN chmod 0644 /etc/cron.d/cjob
ENV PYTHONUNBUFFERED 1
CMD cron -f

測試python腳本populatePDBbackground.py是:

from datetime import datetime

print('Script has been started at {}'.format(datetime.now()))

最后我們得到:

$ docker run -d b3fa191e8822
b8e768b4159637673f3dc4d1d91557b374670f4a46c921e0b02ea7028f40e105

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
b8e768b41596        b3fa191e8822        "/bin/sh -c 'cron -f'"   4 seconds ago       Up 3 seconds                            cocky_beaver

$ docker exec -ti b8e768b41596 bash
root@b8e768b41596:/code# tail -f /var/log/cron.log
Script has been started at 2019-03-13 00:06:01.095013
Script has been started at 2019-03-13 00:07:01.253030
Script has been started at 2019-03-13 00:08:01.273926

這可能沒有直接關系,但我在 docker 容器中運行的 cronjob 卡住了。 我沒有運氣就嘗試了接受的答案。 我終於發現我用來編輯 Crontab 文件的編輯器 (Notepad++) 被設置為 Windows 行尾 (CR LF)。 一旦我將其更改為 Unix 行尾 (LF),我的 cronjob 在我的 docker 容器中成功運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM