У меня проблема с блокировкой PHP passthru()
, когда предполагается запустить демон.
У меня есть демон Node.js с оболочкой bash-скрипта. Этот bash-скрипт использует небольшую замену процесса, потому что сервер Node.js не может напрямую войти в syslog. Скрипт bash содержит следующую команду:
forever -l app.log app.js
Но поскольку я хочу, чтобы он регистрировался в системном журнале, я использую:
forever -l >(logger) app.js
При замене процесса logger
был создан дескриптор файла, подобный /dev/fd/63
, путь которого передается команде forever
в качестве файла журнала для использования.
Это прекрасно работает, когда я запускаю демон, используя скрипт bash напрямую, но когда скрипт bash выполняется с использованием PHP passthru () или exec (), эти вызовы будут блокироваться. Если вместо замены процесса я использую обычный файл журнала, то и passthru (), и exec () работают нормально, запуская демон в фоновом режиме.
Я создал полный рабочий пример (используя простой демон PHP вместо Node.js) в Gistub Gist: https://gist.github.com/1977896 (требуется PHP 5.3.6 +)
Почему passthru()
вызывает блокировку при замене процесса? И могу ли я что-нибудь сделать, чтобы обойти это?