Задание Cron выполняется в фоновом режиме с официанткой в ​​python: Контейнер 3.7.6-buster (debian)

Я пытаюсь запустить задание cron в контейнере вместе с HTTP-сервером официантки. Независимо от того, что я делаю, мне кажется, что cron не запускается автоматически в контейнере ...

Вот мой файл докеров:

FROM python:3.7.6-buster
RUN apt-get update -y && apt-get install -y python3-dev cron
WORKDIR /home/user

COPY . .
RUN echo "* * * * * root echo hello >> /home/log.log 2>&1\n" > /etc/cron.d/task
RUN chmod 0644 /etc/cron.d/task
RUN crontab /etc/cron.d/task
RUN touch /home/log.log
CMD cron

EXPOSE 80

ENTRYPOINT [ "waitress-serve" ]
CMD [ "-call", "main:main" ]

Я также пробовал запустить службу cron, но когда контейнер запущен, статус cron службы показывает следующее:

[FAIL] cron не запущен ... сбой!

Что я делаю не так?

0
задан 13 July 2020 в 16:33
1 ответ

Docker vs VMs

Вы не запускаете cron нигде в dockerfile. Также контейнеры не используют init.d и systemd, они не являются виртуальными машинами и не имеют собственного systemd/init.d. Вот почему вы видите следующую ошибку:

[FAIL] cron is not running ... failed!

Мое решение состоит в том, чтобы написать простой скрипт bash (или просто изменить весь CMD), который запускает crond и другие вещи, которые вы хотите работать в фоновом режиме. Пример:

crond -P -n -s && waitress-serve -call main:main && tail -f /home/log.log

Команда tail -f предназначена для предотвращения мгновенного выхода из вашего контейнера.Флаги -P -n -s предназначены для наследования пути из среды (-P), отправки вывода задания в системный журнал, что является необязательным, и это просто мое предпочтение (-s), и работы в фоновом режиме (-n ).

Затем просто скопируйте этот скрипт и измените CMD на:

CMD script.sh

Также добавьте это в свой dockerfile. Это обязательно для флага -n.

RUN sed -i '/session    required   pam_loginuid.so/c\#session    required   pam_loginuid.so' /etc/pam.d/crond

Думаю, теперь это должно сработать. Если у вас возникнут проблемы, просто напишите мне комментарий. Это мое первое решение, так что наберитесь терпения: D

0
ответ дан 15 July 2020 в 00:33

Теги

Похожие вопросы