Службы (Демоны) на PHP

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

Итак, начнем. Для начала закроем потоки STDIN, STDOUT:

fclose(STDIN);
fclose(STDOUT);
fclose(STDOERR);

Вы можете не закрывать, а перенаправлять в другой файл. Далее нам нужно создать дочерний процесс и закрыть родительский. Тем самым мы отвязываемся от консоли.

$child = pcntl_fork();
if ($child) {
   exit();
}

posix_setsid();

И делаем самое страшное: создаем бесконечный цикл!

while (true) {
    // …
    sleep(1);
}

Теперь мы можем запустить из консоли “php daemon.php”. Скрипт будет работать в фоне непрерывно, но не надейтесь на непрерывность, что-то может пойти не так, и вы потеряете ваш скрипт.