AWSでPostgresデータベースにデータを入力するpythonスクリプトがあります。
私はそれを手動で実行でき、問題なくデータベースにデータをロードしています。 Dockerコンテナー内で5分ごとに1回実行したいと思います。
だから私はそれをドッカーイメージに含めて実行しました。しかし、なぜ実行されないのかはわかりません。 /var/log/cron.log
ファイルに何も追加されていません。誰かがなぜそれが実行されていないのかを理解するのを手伝ってくれる?
Dockerのビルド中にスクリプトをイメージにコピーして、手動で実行することができます。 DBにデータが入力されており、期待どおりの出力が得られます。
スクリプトは/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
crontab:
*/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