Для коротких строк strtol
, strtoll
и strtoimax
будут работать нормально (обратите внимание, что третий аргумент является базой для обработки строки ... установите ее в 16). Если ваш ввод длиннее number-of-bits-in-the-longest-integer-type/4
, вам понадобится один из более гибких методов, предложенных другими ответами.
Если Вы не можете использовать (надлежащую) init структуру, чтобы сделать это (Вы находитесь на общем хостинге, и т.д.), используйте крон для запущения скрипта (это может быть записано на любом языке, который Вы любите), каждые несколько минут, который проверяет, чтобы видеть, работают ли они, и перезапускает их при необходимости.
Мы выполняем наших демонов путем передачи по каналу вывода к почте.
php daemon.php | mail -s "daemon stopped" foo@example.org
Тот путь, когда/если демон останавливается, это отправит почту, и мы будем уведомлены тот путь.
Это все еще означает ручной перезапуск демонов, конечно, но мы будем знать сразу же. Обычно, если остановленные демоны, это означает, что существует что-то еще, что должно заботиться о так или иначе, таким образом, это обычно в порядке.
Быстрый и грязный крон для перезапуска демона:
* * * * * 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
Я имел успех с выполнением wget и отправкой результата к/dev/null на общем сервере.
Я использую основанный на PHP сценарий, чтобы читать из базы данных и послать электронные письма (пользующийся библиотекой PEAR Mail_Queue). Я выполняю его из сценария удара и на основе возвращенного результата (от "$status выхода";) или останов, сон X секунд, или сразу перезапускает. (Я также поместил проверку среднего числа/сна загрузки в Сценарий PHP, чтобы не подчеркивать почтовую систему).
Если это было для долгосрочного демона, который должен был постоянно работать, то я соглашаюсь, это, вероятно, не была бы лучшая вещь выполнить это (хотя я услышал о некоторых серверах сокета, которые действительно выполняли успешно длительный срок), однако, PHP 5.3 действительно также теперь имеет улучшенную сборку "мусора", и если сценарий достаточно правильно написан для не выхода незапланированный, то память должна быть намного меньшим количеством проблемы это прежде.
TBH, PHP, вероятно, не является лучшим инструментом для этого, действительно не, для чего он был разработан. Я услышал об утечках памяти и других плохих вещах случай, когда Вы пробуете это. Также примите во внимание, что PHP только имеет конечную сумму идентификаторов ресурса (для дескрипторов файлов, ect соединений дб) на выполнение сценария.
Будьте лучше из использования чего-то еще, возможно, Python или жемчуг, хотя у меня нет реального опыта при записи этих видов приложений, но я знаю, что PHP не является правильным для какой попытка сделать.