diff --git a/init.d/cjdroute b/init.d/cjdroute index cdf9555..1dba840 100755 --- a/init.d/cjdroute +++ b/init.d/cjdroute @@ -1,9 +1,9 @@ #!/usr/bin/env watchman # Two warnings: # 1) This script uses a script to run cjdroute and feed it -# the config. It can be found in the main cjdns repo: -# contrib/sh/run-cjdroute.sh -# Or here: http://ix.io/fYT +# the config. It can be found in the main cjdns repo: +# contrib/sh/run-cjdroute.sh +# Or here: http://ix.io/fYT # 2) service_respawn is disabled by default because you need # "noBackground":1 in cjdroute.conf for it to actually work. # Barely. @@ -28,11 +28,33 @@ start() { watchman.start } +get_control_pid() { + lsof -i :"$cjdroute_admin_port" | tail -1 | cut -d ' ' -f 2 +} + +status() { + # Check the actual cjdroute process and not the watchdog + cjdroute_control_pid=$( get_control_pid ) + + counter=0 + until kill -0 "$cjdroute_control_pid"; do + cjdroute_control_pid=$( get_control_pid ) + (( counter >= 5 )) && { + watchman.msg "cjdroute is down" + return 1 + } + (( counter++ )) + sleep 1 + done + + watchman.msg "cjdroute is running ($cjdroute_control_pid)" +} + stop() { [[ "$service_respawn" == 'true' ]] && { watchman.stop; } # stopping the watchdog # Stopping the actual s-o-b daemon that won't die properly. - cjdroute_control_pid=$(lsof -i :"$cjdroute_admin_port" | tail -1 | cut -d ' ' -f 2) + cjdroute_control_pid=$( get_control_pid ) watchman.pid_check "$cjdroute_control_pid" && { kill "$cjdroute_control_pid" watchman.pid_wait "$cjdroute_control_pid"