Как организовать управление демонами на PHP?

Посоветуйте, как лучше организовать управление демонами на PHP. Нужно, чтобы все работало максимально стабильно и было удобно дебажить, если происходят аварийные ситуации и некоторые демоны падают. Также нужно, чтобы был один мастер процесс, к котрому можно было бы как-нибудь(например, через терминал) обращаться(в том числе из разных скриптов и его дочерних процессов), чтобы он мог создавать, удалять, останавливать нужные процессы, т.е. слежение и управление его дочерними процессами.
Есть идея собрать какой-то свой велосипед, который будет основан на статьях из хабра:
Демоны на PHP
Многопроцессовые демоны на PHP

Но не уверен, что это будет стабильно, и я смогу предусмотреть все ситуации, а мне нужно, чтобы сервис был максимально неубиваемым. Еще слышал про Supervisor, но толком еще в нем не разобрался. Может, есть какие-то еще варианты?
  • Вопрос задан
  • 926 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Также нужно, чтобы был один мастер процесс


Очень крутая тема с этим в том, что вам не обязательно нужен мастер процесс написанный на php. Вы можете взять старый добрый pm2 для nodejs, или supervisord для unix. Я к примеру вообще тупо запускаю "демоны" в отдельных докер контейнерах, и у меня полный контроль за ситуацией (docker-demon в моем случае выступает в роли гипервизора).

Есть идея собрать какой-то свой велосипед


Разве что у вас куча свободного времени. Свои велосипеды это весело и познавательно, но такие вещи писать надо уметь. Иначе не стоит их пихать в продакшен.

мне нужно, чтобы сервис был максимально неубиваемым.


именно с такими требованиями справляется erlang. В целом же стоит знать контекст задачи. В общем изучайте supervisord, судя по всему он покрывает все ваши нужды.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
4utka_pyan
@4utka_pyan
Сильно зависит от специфики деятельности, иногда проще перезапускать по cron каждые 5 минут что-то чем сделать настоящий не падающий демон. А так юзайте
// Смотрите идентификатор процесса
$pid = getmypid();
// Смотрите список всех процессов с pid из php и ищите в нём свой демон (если есть ок, если нет - упал)
exec('ps aux', $m);

//Запускайте демона со своим собственным именем
$pid = getmypid();
$title = "my_daemon";
 
if (!cli_set_process_title($title)) {
    echo "Unable to set process title for PID $pid...\n";
    exit(1);
} else {
    echo "The process title '$title' for PID $pid has been set for your process!\n";
    sleep(5);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы