I'm trying to daemonize my application using Apache Commons Daemon using the Daemon interface. Java application it self isn't doing anything just writes to stout.
I compiled jsvc: http://people.apache.org/~mturk/daemon-1.0.10/
(even tried newest version: http://people.apache.org/~mturk/daemon-1.0.12/ )
and wrote this basic script.
do_exec()
{
$EXEC \
-home "$JAVA_HOME" \
-cp $CLASS_PATH \
-outfile $LOG_OUT \
-errfile $LOG_ERR \
-pidfile $PID \
$1 \
$MAIN_CLASS
echo "result: $?"
}
case "$1" in
start)
do_exec
;;
stop)
do_exec "-stop"
;;
restart)
do_exec "-stop"
do_exec
;;
*)
echo "usage: daemon {start|stop|restart}" >&2
exit 3
;;
esac
Now when I try to stop the daemon when it's not running I'll get response code 255. Thas fantastic.
But when I try start the daemon when it's already running I get response code 0. But in my errfile I find:
Still running according to PID file /tmp/deamon.pid, PID is 1799
Service exit with a return value of 122
Same thing when I try throw exception in start() method and attempt to start daemon, response code 0. But errfile:
Service exit with a return value of 5
What I'm missing here? How can I inform user stat the deamon didn't start or that it is already running?
After carefully reading how JSVC works: http://commons.apache.org/daemon/jsvc.html
I found out what I was doing wrong, I have to use the wait parameter
When the -wait parameter is used, the launcher process waits until the controller says "I am ready", otherwise it returns after creating the controller process.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With