PHP - как управлять демонами автоматически?

at0m1x

Новичок
Привет всем)

Есть проект, в котором используются фоновые обработчики очередей задач, например отправка писем. Эти фоновые обработчики работают в виде демоном. Каждый демон настроен в upstart'е, для того что бы в случае падения, система автоматически его запускала. Но есть небольшое неудобство, заключается оно в том, что для каждого демона нужно создавать отдельный конфиг апстарта вручную. ОС: Ubuntu.

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

Знаю что есть подобные утилиты в других ЯП например в руби это фореман, в ноде это например pm2. Но хотелоcь бы найти что то более "родное" именно для PHP.

Чего хотелось бы от этой утилиты:
- можно указывать кол-во инстансов демона
- авто-перезапуск через определенные промежутки времени (как по крону)
- авто-запуск при падении демона
- авто-запуск при старте ОС
- веб-интерфейс отображающий текущее потребление памяти и strout и strerr
 

stalxed

Новичок
@at0m1x, чисто в теории(сам такое не пробовал):
1) Устанавливаем http://supervisord.org/
2) Настраиваем инклуд с директории, в которую у нас есть права записи http://supervisord.org/configuration.html#include-section-settings
3) Генерим нужные конфиги при помощи https://github.com/supervisorphp/configuration
4) Ребутим супервизор при помощи XML-RPC интерфейса этим https://github.com/supervisorphp/supervisor
 

Absinthe

жожо
Чего хотелось бы от этой утилиты:
- можно указывать кол-во инстансов демона
- авто-перезапуск через определенные промежутки времени (как по крону)
- авто-запуск при падении демона
- авто-запуск при старте ОС
- веб-интерфейс отображающий текущее потребление памяти и strout и strerr
supervisor, с последним пунктом, возможно, придется что-то дополнительно сделать, не уверен.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
в нем есть и управление инстансами - количество, автоматический перезапуск воркеров, и встроенный вебсервер заодно
http://daemon.io/docs/en/#config/variables/graceful_restart
автозапуск при старте - это, очевидно, строка в /etc/rc.local
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
примерно так же я отношусь к желанию для маленького php-демона ставить зависимость от большой системной питоновской тулзы, которую нельзя включить в проект, и которая предназначена скорее для управления пачкой серверов, чем для простого старта пары демонов
 
Последнее редактирование:

Absinthe

жожо
примерно так же я отношусь к желанию для маленького php-демона ставить зависимость от большой системной питоновской тулзы, которую нельзя включить в проект, и которая предназначена скорее для управления пачкой серверов, чем для простого старта пары демонов
На самом деле это и есть задача этой утилиты.
И это удобно.
 

AnrDaemon

Продвинутый новичок
примерно так же я отношусь к желанию для маленького php-демона ставить зависимость от большой системной питоновской тулзы, которую нельзя включить в проект, и которая предназначена скорее для управления пачкой серверов, чем для простого старта пары демонов
Пять строк для upstart написать такая большая проблема?…
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
я не против upstart, не против supervisor, когда они уместны,
я против чукч-писателей, когда человек черным по белому спрашивает "родное" именно для PHP, и сказал, что конфиги для upstart уже есть, и ему они неудобны

спросите хотя бы чем именно, отвлекитесь от своего ЧСВ
 

cDLEON

Онанист РНРСlub
примерно так же я отношусь к желанию для маленького php-демона ставить зависимость от большой системной питоновской тулзы, которую нельзя включить в проект, и которая предназначена скорее для управления пачкой серверов, чем для простого старта пары демонов
Зависимости как таковой здесь нет. Само приложение можно запустить и без supervisor. Ни каких требований к архитектуре. В нем есть всё для одной единственной задачи - запуска демонов. А изобретенный велосипед на PHP для PHP - вполне себе реальная зависимость.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
@cDLEON, мнение, конечно, эмоциональное, чувствуется истинная вера, но по сути неочевидно, необосновано, следовательно - бесполезно
 

cDLEON

Онанист РНРСlub
@cDLEON, мнение, конечно, эмоциональное, чувствуется истинная вера, но по сути неочевидно, необосновано, следовательно - бесполезно
Ни каких эмоций, сухие факты. ;) Ну коль не очевидно - разжую. Для того, что бы использовать supervisor не нужно знать python. (конфиги+документация по ним) Не нужно подгонять архитектуру приложения. (используются стандартные для всех ос сигналы) И я, конечно, понимаю, что в php приложениях стандарт дефакто 100 мегобайтные логи работы через ini_set error_log, но и ротация логов в supervisor тоже из коробки.
Ну а по поводу "которую нельзя включить в проект" могу только посоветовать вам включить в свой проект php-fpm, например... Ну или, раз уж это демон, php-cli
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
дык теперь, логика понятна!
я лично не согласен с аргументом про fpm - это sapi, который включает pm, но остается частью самого php, и конфиги для него и nginx включены в проект,
логи - это вообще офтоп
суть ясна: supervisor - удобная утилита, я согласен
недостатки: громоздкая, "meant to start at boot time", а для user space app, запускаемого из консоли - это не unix way

не вижу аргументов почему ТСу не стоит посмотреть phpdaemon - полезный фреймворк для нестандартных задач, отвечает всем требованиям
 
Последнее редактирование:

Absinthe

жожо
не вижу аргументов почему ТСу не стоит посмотреть phpdaemon - полезный фреймворк для нестандартных задач, отвечает всем требованиям
Перечитай вопрос.
Он уже его или аналоги использует:
Эти фоновые обработчики работают в виде демоном.

Еще раз перечитай вопрос: чем следить за демоном? Мы и ответили, что следить надо supervisor.
 

vgarin

Новичок
Все же пхп демон - это все же в первую очередь средство создания серверов и IPC между ними. Это явно стрелять из пушки, да и не unix-way типа. При наличии знаний такая вот фигня, что хочет топикстартер пишется за час-два на любом языке почти. Только зачем?

Кстати, могу еще предложить daemontools широко известного в узких кругах D.J.Bernstein-а =) А можно вообще с такой постановкой задачи ограничиться системой управления конфигурацией - оно и будет "конфиг", который каждого демона будет сажать в системный стартап.
 
Сверху