Рубріки: HighloadТеория

Как запустить PHP worker?

Игорь Грегорченко

При использовании очередей сообщений Вам может понадобится запускать PHP процессы, которые должны работать постоянно. Для этого есть несколько подходов:

1. Cron

Можно использовать cron для запуска и перезапуска процессов:

crontab -e

Добавляем туда:

* * * * * if [ $(ps aux | grep 'worker1' | grep -v grep | wc -l | tr -s "n") -lt 5 ]; then /usr/bin/php /var/www/worker1.php >> /var/log/php.worker1.log; fi

При добавлении в cron этой инструкции она будет запускать скрипт worker1.php до тех пор, пока не будет работать 5 таких скриптов одновременно.

Если нужно запустить только один процесс:

* * * * * if [ $(ps aux | grep 'worker1' | grep -v grep | wc -l | tr -s "n") -lt 1 ]; then /usr/bin/php /var/www/worker1.php >> /var/log/php.worker1.log; fi

Каждую минуту cron будет проверять наличие процессов в нужном количестве и запускать новые если понадобится. Быстрое решение, но следующее лучше и удобнее.

2. Supervisord

Supervisord позволяет организовать работу фоновых PHP процессов очень удобно. Установка на Debian:

apt-get install supervisor

В файле конфигурации (nano /etc/supervisor/supervisord.conf), в самом низу добавляем настройки для нужного воркера:

[program:worker]
command=/usr/bin/php /var/www/worker.php
numprocs=1
directory=/var/www/worker
stdout_logfile=/var/log/worker.log
autostart=true
autorestart=true
user=www-data
stopsignal=KILL

Запустит 1 процесс указанного скрипта

Для запуска нескольких копий одного процесса необходимо также указать параметр process_name для определения уникального имени процесса

[program:worker]
command=/usr/bin/php /var/www/worker.php
process_name=%(program_name)s_%(process_num)02d
numprocs=10
directory=/var/www/worker
stdout_logfile=/var/log/worker.log
autostart=true
autorestart=true
user=www-data
stopsignal=KILL

Запустит 10 одновременных процессов указанного скрипта

После этого достаточно перезапустить supervisor и worker.php сразу запустится:

/etc/init.d/supervisor stop 
/etc/init.d/supervisor start

Supervisor сам будет следить за процессами, запускать их в случае падения, а также после перезагрузки системы. Вы можете запускать несколько копий процессов, указывая их количество в параметре numprocs.

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023