Как запустить работу cron в Docker-контейнере? - PullRequest
0 голосов
/ 11 марта 2019

У меня есть скрипт на python, который заполняет базу данных Postgres в AWS.

Я могу запустить его вручную, и он загружает данные в базу данных без каких-либо проблем. Я хочу запускать его один раз каждые 5 минут в контейнере докера.

Так что я включил его в образ докера для запуска. Но я не уверен, почему он не работает. Я не вижу ничего добавленного в файл /var/log/cron.log. Может кто-нибудь помочь мне понять, почему он не работает?

Я могу скопировать скрипт в образ во время сборки Docker и могу запустить его вручную. БД заполняется, и я получаю ожидаемый результат.

Сценарий находится в текущем каталоге, который будет скопирован в /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

1 Ответ

1 голос
/ 13 марта 2019

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
...