Рубрики
Uncategorized

Докер использует супервизор для управления очередями люмена и кронтаб

Автор оригинала: David Wong.

До докера Внутреннего использования люмена Служба очередей системы выполняет асинхронную операцию для выполнения некоторых связанных операций аудита содержимого. Но каждый раз, когда вы перезапускаете контейнер, вам нужно вводить его. докер Внутренний запуск люмен Процесс очереди (хотя и записан в документе) супервайзер Управление процессами, но не делает этого. Необходимо использовать последние требования crontab , поэтому я решил использовать его. руководители Для управления этими процессами.

руководитель

файл dockerfile

Installation
RUN apt-get update && apt-get install -y \
        supervisor\
        cron \
    
#supervisord  
RUN mkdir -p /var/log/supervisor
COPY supervisord.conf /etc/supervisor/supervisord.conf

#crontab
# Add root file to / var / spool / cron / crontabs / below
ADD cron/root /var/spool/cron/crontabs/root

# Modifying the Groups and Permissions of Root Files
RUN chown -R root:crontab /var/spool/cron/crontabs/root \
 && chmod 600 /var/spool/cron/crontabs/root

# Create log file
RUN touch /var/log/cron.log

EXPOSE 80

ENTRYPOINT ["/usr/bin/supervisord","-c", "/etc/supervisor/supervisord.conf"]

примечания : ТОЧКА ВХОДА Необходимо добавить инструкции -c Параметры, иначе будет одно ПРЕДУПРЕЖДЕНИЕ

примечания ||: || ТОЧКА ВХОДА || Необходимо добавить инструкции || -c || Параметры, иначе будет одно || ПРЕДУПРЕЖДЕНИЕ

[supervisord]
nodaemon=true
[program:apache2]
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"
autostart=true
autorestart=true
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/artisan queue:work --daemon --quiet  --delay=3 --sleep=3 --tries=3
autostart=true
autorestart=true
numprocs=3
redirect_stderr=true
[program:entrypoint]
command=/var/www/html/entrypoint.sh
[program:cron]
command=/etc/init.d/cron start
autostart=true
autorestart=true
redirect_stderr=true

Вот несколько моментов, которые следует отметить:

nodaemon=true Процесс супервайзеров будет выполняться на переднем плане Это должно быть правдой, иначе он запускается. докер Иногда он будет появляться. Вышел (0) , докер Вывод. Потому что должно быть что-то бегущее перед зеркалом.

имя процесса=%(имя программы)s_%(номер процесса)02d Имя процесса numprocs=3 Попросите супервайзера запустить 3 процесса остаться numprocs Несколько раз имя_процесса Для требуемого значения, в противном случае имя будет конфликтовать, чтобы сообщить об ошибках

В этой статье содержится подробное описание конфигурации супервизора

Очередь на просвет

Документация очень подробная, и здесь больше нет избыточности.

Эта статья также очень подробная.

кронтаб

Выше файл dockerfile В файле были записаны конкретные установки и настройки.

Документация содержит конкретное использование задач синхронизации laravel

Обратите внимание, что cron Нужно после установки супервайзер Запустить, а затем вам нужно записать запись о временной задаче в один root В документе, dockerfile в добавить Зеркальное изображение /var/катушка/cron/crontabs/root Каталог

* * * * * /usr/local/bin/php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

Будьте осторожны Нужно написать /usr/local/bin/php В противном случае задача не будет выполнена.

Этот cron будет вызываться каждую минуту lumen Планировщик команд планировщик:запуск После выполнения команды/| lumen Оцените запланированные задачи и выполните запланированные задачи.

Вы можете столкнуться с ситуациями, когда задачи не выполняются и их необходимо проверить /var/log/cron.log Файл журнала, см. Конкретные причины. Установка требуется, если в файле журнала нет содержимого rsyslog , Затем измените /etc/rsyslog.conf Документ будет cron.*/var/log/cron.log Удалите предыдущий комментарий. Затем /etc/init.d/запуск rsyslog Посмотрите еще раз cron.log Вы можете просмотреть соответствующий журнал.

Будьте осторожны : crontab Использование переменных среды

Поскольку crontab Механизм выполнения не позволяет напрямую использовать переменные среды конфигурации, но конфигурация нашего приложения настраивается с помощью переменных среды, поэтому нам нужно сохранить эти переменные среды в команде env. /etc/по умолчанию/язык Li, crontab Переменные среды в этом файле будут загружены при запуске, в противном случае соответствующая конфигурация приложения будет недоступна при выполнении команды, что приведет к ошибкам выполнения. Поэтому я воспользовался одним из них. оболочка Скрипт, в супервизор Выполните его.

Поскольку || crontab || Механизм выполнения не позволяет напрямую использовать переменные среды конфигурации, но конфигурация нашего приложения настраивается с помощью переменных среды, поэтому нам нужно сохранить эти переменные среды в команде env. ||/etc/по умолчанию/язык || Li, || crontab || Переменные среды в этом файле будут загружены при запуске, в противном случае соответствующая конфигурация приложения будет недоступна при выполнении команды, что приведет к ошибкам выполнения. Поэтому я воспользовался одним из них. || оболочка || Скрипт, в || супервизор || Выполните его.

#!/bin/bash

set -x

rm -rf /etc/default/locale
env >> /etc/default/locale

exec "[email protected]"