Эта тема на forum.dklab.ru


ktulu: Особенности написания демона на PHP
У меня стоит задача написания демона на PHP.
Задача будет выполняться следующая: выборка данных из БД и хранение их в памяти.
Данные будут использоваться другими процессами.
Есть проблемы которые надо решать:

Утечки памяти.. надо как то перезагружать демон. Как это правильно делать? Форк? Есть какие то еще способы?
Как застраховаться от вылета скрипта?

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

Спасибо.
dimagolov:
гугл молчит?
Дмитрий Круглов:
Я как-то писал не совсем демона, но что-то в этом роде - ICQ-бота.

В моем случае для перезагрузки/выгрузки я использовал "PID-файл" и скрипт-контролер. У скрипта контролера есть обычные команды: старт, рестарт, стоп.
При старте контролер генерирует уникальный PID, пишет его в файл, запускает непосредственно скрипт-демон аськобота, передавая ему этот пид. Сам "демон" в своем главном цикле каждую секунду (чтобы не перегружать ФС) читает пид-файл и сравнивает PID из файла со своим, сгенерированным при старте. Если они не совпадают, то скрипт завершает работу, если файл отсутствует, то скрипт завершает работу.

Таким образом, если вызвать контролер процесса с параметром restart, то он сначала убивает пид-файл, ждет секунду и запускает новый процесс с новым PID'ом;
если вызвать контролер с параметром start, то он проверяет наличие пид-файла, если он существует, то выдается ошибка, что процесс уже запущен, если нет, то генерит новый пид и запускает процесс;
если вызвать контролер с параметром stop, то он просто убивает PID-файл. В моем случае контролер был доступен через http.

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

Эта тема на forum.dklab.ru