воскресенье, 26 января 2014 г.

Почему PHP скрипты не работают в фоновом режиме консоли

Причиной тому является определенное поведение PHP-интерпретатора когда он теряет связь с запустившим его клиентом, а в данном случае — с вводом командной строки. Если изучить PHP-документацию по работе с соединениями, то оттуда можно узнать что таким поведением можно управлять при помощи директивы конфигурации или же функции вызываемой непосредственно в самом PHP-скрипте — ignore_user_abort. Однако эта функция не всегда помогает.

Итак, решение очень простое — нужно дать PHP-скрипту то, что ему нужно — поток ввода, который он будет считать клиентом и не будет завершать свою работу:
$ php -q script.php < /dev/null > script.log &
Либо воспользоваться утилитой nohup
nohup php -q script.php > script.log 2>&1 &
Еще один альтернативный способ из wikipedia с использованием программы screen:
 $ screen -A -m -d -S somename ./somescript.sh & 

http://www.php.net/manual/ru/features.connection-handling.php

Комментариев нет:

Отправить комментарий