Hi, I'm writing a Debian init script for unicorn and realized that when starting unicorn with daemonize option, the command always returns 0, even if the start action failed (due for example Errno::EADDRINUSE).
Returning 0 in such case is not good as it breaks service init scripts or service controllers (as HeartBeat) that fully rely on the appropriate exit code. Is there some way to determine if unicorn failed to start when using "-D"? Another related issue: When the Rack config.ru file contains some error (as a typo) the worker(s) returns 1 (at the moment usually). Then unicorn master process reapes the terminated worker process and restarts it. Of course it would fail again and again. Anyhow "unicorn -D" returns 0 again (success). Usually if a worker (all the workers) fail to start at the moment of running it, it obviously means that there is some error in the application with prevents it to run. It could be great if Unicorn could detect it. For that I suggest something as a new option "--validation-time TIME". Let's suppose TIME is 5 seconds. In case *all* the workers fail within 5 seconds after starting unicorn, then unicorn understands that the Rack application is wrong (or any other error as Errno::EADDRINUSE) so terminates all the workers and itself (and hopefully returns 1 or any other non-zero exit status). Of course, all the above means that Unicorn should wait TIME seconds before being daemonized (so after TIME seconds it can decide which code to return). Does it make sense? Thanks a lot. -- Iñaki Baz Castillo <[email protected]> _______________________________________________ Unicorn mailing list - [email protected] http://rubyforge.org/mailman/listinfo/mongrel-unicorn Do not quote signatures (like this one) or top post when replying
