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

Итак, начнем. Для начала закроем потоки STDIN, STDOUT:
fclose(STDIN);
fclose(STDOUT);
fclose(STDOERR);
Вы можете не закрывать, а перенаправлять в другой файл. Далее нам нужно создать дочерний процесс и закрыть родительский. Тем самым мы отвязываемся от консоли.
$child = pcntl_fork();
if ($child) {
   exit();
}

posix_setsid();
И делаем самое страшное: создаем бесконечный цикл!
while (true) {
    // …
    sleep(1);
}
Теперь мы можем запустить из консоли “php daemon.php”. Скрипт будет работать в фоне непрерывно, но не надейтесь на непрерывность, что-то может пойти не так, и вы потеряете ваш скрипт.