#python #docker #cron #supervisord
#python #docker #cron #супервизор
Вопрос:
Когда я запускаю сборку контейнера с помощью CMD, CMD /usr/bin/python3 /app/test.py
все работает нормально, и я вижу вывод, но когда я запускаю CMD, в качестве CMD ["/usr/bin/supervisord", "-n"]
которого запускаются supervisor и cron, я не вижу вывода. Похоже, что файл python не запущен, или я неправильно настроен для просмотра ведения журнала.
Как я могу убедиться, что файл python запущен, и как я могу увидеть результат?
Мой файл Dockerfile:
FROM ubuntu:16.04
RUN apt-get update
RUN apt-get install -y apt-utils -y cron -y liblapack3 -y build-essential
-y python3-dev -y python3-setuptools -y python3-numpy
-y python3-scipy -y python3-pip -y libatlas-dev
-y supervisor
COPY . /app
# install requirements (early and on their own to leverage caching)
COPY ./requirements.txt /app/requirements.txt
RUN pip3 install -r /app/requirements.txt
# make script executable
RUN chmod x /app/test.py
# do cron stuff
COPY ./crontab /etc/cron.d/crontab
RUN chmod 0644 /etc/cron.d/crontab
CMD cron amp;amp; tail -f /var/log/cron.log
COPY ./supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# CMD ["/usr/bin/supervisord", "-n"]
CMD /usr/bin/python3 /app/test.py
supervisord.conf является:
[supervisord]
nodaemon=true
loglevel=debug
[program:cron]
command = cron -f -L 15
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
crontab — это:
* * * * * root /usr/bin/python3 /app/test.py
* * * * * root echo "hello world" >> /var/log/cron.log 2>amp;1
и test.py есть:
#!/usr/bin/env python
import logging
from lib.rig import settings
#set logging level to INFO
logging.getLogger().setLevel(settings.get('logging_level'))
logging.info('LOLOLOL')
print('this is a print')
Комментарии:
1. Я не вижу ПУТИ,
crontab
который может привести к тому, что программа python не будет выполнена — если у вас ее там нет, просто добавьте что-то вродеSHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
— проверьте 34.1.1. Настройка задач Cron
Ответ №1:
Вам не хватает PATH
объявления переменной среды, из-за чего ваше приложение на Python не запускается. Редактирование вашего файла Dockerfile следующим образом должно устранить проблему для вас:
FROM ubuntu:16.04
ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# This is the line that matters ^^
RUN apt-get update
...
Подробнее о ENV
переменной см. Здесь .