Dockerizin a python cronjob - PullRequest
       15

Dockerizin a python cronjob

0 голосов
/ 25 апреля 2020

У меня есть python скрипт, который должен работать с python3. Теперь у меня есть требование, чтобы запустить его как cronjob. А затем контейнирование всей упаковки. Следовательно, при установке образ docker должен установить cronjobs и запустить скрипт python в docker.

. Я попытался выполнить следующее, сборка прошла успешно, и он не выполняется. ошибки тоже. Но это не работает.

В чем здесь проблема?

needs.txt

Flask
waitress

app.py

from datetime import datetime

print("\nThis is the cronjob running...:" , str(datetime.now()),"\n")

Dockerfile

FROM python:3-alpine

ENV PROJ_DIR="/app"
ENV CRON_SPEC="* * * * *"
ENV LOG_FILE="${PROJ_DIR}/app.log"

WORKDIR ${PROJ_DIR}

COPY . ${PROJ_DIR}

RUN pip install -r requirements.txt

CMD echo "${CRON_SPEC} python ${PROJ_DIR}/app.py >> ${LOG_FILE} 2>&1" > ${PROJ_DIR}/crontab

CMD crontab ${PROJ_DIR}/crontab

CMD crontab -l

CMD cron && tail -f ${LOG_FILE}

1 Ответ

1 голос
/ 25 апреля 2020

Как уже упоминалось, будет выполнена только последняя CMD. Вы должны запустить свои shell команды с RUN.

Вот рабочий пример вашего Dockerfile с необходимыми настройками:

FROM python:3-alpine

ENV PROJ_DIR="/app"
ENV LOG_FILE="${PROJ_DIR}/app.log"
ENV CRON_SPEC="* * * * *" 

WORKDIR ${PROJ_DIR}

COPY . ${PROJ_DIR}

RUN pip install -r requirements.txt
RUN echo "${CRON_SPEC} python ${PROJ_DIR}/app.py >> ${LOG_FILE} 2>&1" > ${PROJ_DIR}/crontab
RUN touch ${LOG_FILE} # Needed for the tail
RUN crontab ${PROJ_DIR}/crontab
RUN crontab -l
CMD crond  && tail -f ${LOG_FILE} #crond runs per default in the background

Решает ли это вашу проблему?

...