PHP passthru() blocks with bash process replacement?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all,

I have a problem with PHP passthru() blocking when it is supposed to start a
daemon and return.

I have a Node.js daemon with a bash script wrapper around it. Users can call
this bash script directly, but it is also used by our deployment system. Our
deployment system uses Phing, and Phing uses `exec()` and `passthru()`
internally to cann external programs.


The bash script wrapper around my Node.js uses a bit of process replacement
because my Node.js server can't directly log to syslog. Normally I'd start
Node.js like this:

    forever -l app.log app.js

But because I want it to log to syslog, I put this in the bash script:

    forever -l >(logger) app.js

The `logger` process replacement creates a file descriptor into syslog like
/dev/fd/63 whose path is passed to the forever command as the logfile to use.

This works great when I start the daemon using the bash script directly, but
when the bash script is executed using PHP passthru() or exec() then these
calls will block. If I use a regular logfile instead of the process
replacement then both passthru() and exec() work just fine, starting the
daemon in the background.

I have created a complete working example (using a simple PHP daemon instead
of Node.js) on Github's Gist: https://gist.github.com/1977896 (needs PHP 5.3.6+)

Why does the passthru() call block on the process replacement? And is there
anything I can do to work around it?

Kind regards,

-- 
Sander Marechal

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux