Постоянно работающий работник Gearman - PullRequest
3 голосов
/ 02 апреля 2011

У меня есть процесс, который я хотел бы запустить в фоновом режиме, запустив клиент Gearman в любое время.

Я добился успеха, открыв два SSH-соединения с моим сервером, и в одном из них запускается рабочий, а в другом - запускается клиент. Это дает желаемый результат.

Проблема в том, что мне бы хотелось, чтобы рабочий постоянно работал в фоновом режиме, чтобы я мог просто вызывать клиента всякий раз, когда мне нужно выполнить процесс. Но как только я закрываю терминал, на котором запущен рабочий PHP-файл, звонок клиенту не работает - рабочий, похоже, умирает.

Есть ли способ заставить работника постоянно работать в фоновом режиме, поэтому вызов нового клиента будет работать без запуска нового работника?

Спасибо!

Ответы [ 2 ]

6 голосов
/ 02 апреля 2011

Если вы хотите, чтобы программа продолжала работать даже после смерти ее родителя (т.е. вы закрыли свой терминал), вы должны вызвать ее с помощью nohup:

nohup your-command &


Цитирую соответствующую страницу Википедии, на которую я ссылаюсь:

nohup - это команда POSIX, которую следует игнорировать сигнал HUP (зависание), включение команда продолжать работать после пользователь, выполнивший команду, вошел в систему out .
Сигнал HUP (зависание) условно, как терминал предупреждает в зависимости от процессов выхода из системы.


Для другого (возможно, большего) интересного решения см. Следующую статью: Dæmonize Your PHP .

Указывает на Supervisord , который гарантирует, что процесс все еще работает, и, при необходимости, перезапускает его.

3 голосов
/ 02 апреля 2011

Существует ли способ, позволяющий работнику постоянно работать в фоновом режиме, поэтому вызов нового клиента будет работать без запуска нового работника?

Supervisor !

В календаре PHP Advent 2009 есть небольшая статья об использовании Supervisor (и других приемах) для создания постоянно работающих PHP-сценариев без необходимости заниматься процессом демонизации в самом PHP..

...