Что лучший способ состоит в том, чтобы поддерживать Сценарий PHP в рабочем состоянии как демона?

Для коротких строк strtol, strtoll и strtoimax будут работать нормально (обратите внимание, что третий аргумент является базой для обработки строки ... установите ее в 16). Если ваш ввод длиннее number-of-bits-in-the-longest-integer-type/4, вам понадобится один из более гибких методов, предложенных другими ответами.

8
задан Jeff Atwood 2 September 2008 в 01:05
поделиться

6 ответов

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

4
ответ дан 5 December 2019 в 12:15
поделиться

Мы выполняем наших демонов путем передачи по каналу вывода к почте.

php daemon.php | mail -s "daemon stopped" foo@example.org

Тот путь, когда/если демон останавливается, это отправит почту, и мы будем уведомлены тот путь.

Это все еще означает ручной перезапуск демонов, конечно, но мы будем знать сразу же. Обычно, если остановленные демоны, это означает, что существует что-то еще, что должно заботиться о так или иначе, таким образом, это обычно в порядке.

3
ответ дан 5 December 2019 в 12:15
поделиться

Быстрый и грязный крон для перезапуска демона:

* * * * * USER ps auxww | grep SCRIPTNAME > /dev/null || SCRIPTNAME

Замените ПОЛЬЗОВАТЕЛЯ пользователем, которого демон выполняет как и SCRIPTNAME с названием Вашего сценария. Всуньте это /etc/cron.d/restart_php_daemon. Это должно работать каждую минуту. Измените первое * кому: */2 или */5 работать менее часто.

ОБНОВЛЕНИЕ

Если Вы помещаете это в свой собственный crontab:

Выполненный crontab -e и добавьте:

* * * * * ps auxwww | grep SCRIPTNAME > /dev/null || SCRIPTNAME
3
ответ дан 5 December 2019 в 12:15
поделиться

Я имел успех с выполнением wget и отправкой результата к/dev/null на общем сервере.

1
ответ дан 5 December 2019 в 12:15
поделиться

Я использую основанный на PHP сценарий, чтобы читать из базы данных и послать электронные письма (пользующийся библиотекой PEAR Mail_Queue). Я выполняю его из сценария удара и на основе возвращенного результата (от "$status выхода";) или останов, сон X секунд, или сразу перезапускает. (Я также поместил проверку среднего числа/сна загрузки в Сценарий PHP, чтобы не подчеркивать почтовую систему).

Если это было для долгосрочного демона, который должен был постоянно работать, то я соглашаюсь, это, вероятно, не была бы лучшая вещь выполнить это (хотя я услышал о некоторых серверах сокета, которые действительно выполняли успешно длительный срок), однако, PHP 5.3 действительно также теперь имеет улучшенную сборку "мусора", и если сценарий достаточно правильно написан для не выхода незапланированный, то память должна быть намного меньшим количеством проблемы это прежде.

0
ответ дан 5 December 2019 в 12:15
поделиться

TBH, PHP, вероятно, не является лучшим инструментом для этого, действительно не, для чего он был разработан. Я услышал об утечках памяти и других плохих вещах случай, когда Вы пробуете это. Также примите во внимание, что PHP только имеет конечную сумму идентификаторов ресурса (для дескрипторов файлов, ect соединений дб) на выполнение сценария.

Будьте лучше из использования чего-то еще, возможно, Python или жемчуг, хотя у меня нет реального опыта при записи этих видов приложений, но я знаю, что PHP не является правильным для какой попытка сделать.

-1
ответ дан 5 December 2019 в 12:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: