[英]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.