From 16e1da530f252a5ce22f3e6227c9db9c6708d045 Mon Sep 17 00:00:00 2001 From: Markus Frosch Date: Wed, 11 Dec 2013 15:19:50 +0100 Subject: [PATCH 1/3] Debian: Added checkconfig helper to initscript. And simplified check handling over all functions. Refs #5305 --- debian/icinga2-common.icinga2.init | 49 ++++++++++++++---------------- 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/debian/icinga2-common.icinga2.init b/debian/icinga2-common.icinga2.init index 1c3821338..e3be727ac 100644 --- a/debian/icinga2-common.icinga2.init +++ b/debian/icinga2-common.icinga2.init @@ -51,13 +51,9 @@ check_run () { } check_config () { - if ! $DAEMON --validate -u "$DAEMON_USER" -g "$DAEMON_GROUP" -c "$DAEMON_CONFIG" >/dev/null 2>&1; then - # blark output - $DAEMON --validate -u "$DAEMON_USER" -g "$DAEMON_GROUP" -c "$DAEMON_CONFIG" - fi + $DAEMON --validate -u "$DAEMON_USER" -g "$DAEMON_GROUP" -c "$DAEMON_CONFIG" } - # # Function that starts the daemon/service # @@ -116,17 +112,25 @@ do_reload() { return 0 } +do_check_config () { + DOEXITONOK="$1" + log_begin_msg "checking Icinga2 configuration" + if ! check_config >/dev/null 2>&1; then + echo + check_config + log_failure_msg "checking Icinga2 configuration" + exit 1 + else + log_end_msg 0 + [ -n "$DOEXITONOK" ] && exit 0 + fi +} + check_run case "$1" in start) - log_action_msg "checking Icinga2 configuration" - if ! check_config; then - log_failure_msg "config test failed!" - log_end_msg 1 - exit 1 - fi - + do_check_config log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in @@ -146,25 +150,13 @@ case "$1" in status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? ;; reload|force-reload) - log_action_msg "checking Icinga2 configuration" - if ! check_config; then - log_failure_msg "config test failed!" - log_end_msg 1 - exit 1 - fi - + do_check_config log_daemon_msg "Reloading $DESC" "$NAME" do_reload log_end_msg $? ;; restart) - log_action_msg "checking Icinga2 configuration" - if ! check_config; then - log_failure_msg "config test failed!" - log_end_msg 1 - exit 1 - fi - + do_check_config log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in @@ -182,8 +174,11 @@ case "$1" in ;; esac ;; + checkconfig) + do_check_config 1 + ;; *) - echo "Usage: $SCRIPTNAME {start|stop|status|reload|force-reload|restart}" >&2 + echo "Usage: $SCRIPTNAME {start|stop|status|reload|force-reload|restart|checkconfig}" >&2 exit 3 ;; esac From 6200c8164cdee06b62640741979d5ba42783bff1 Mon Sep 17 00:00:00 2001 From: Markus Frosch Date: Wed, 11 Dec 2013 15:34:29 +0100 Subject: [PATCH 2/3] Debian: Cleaned up indention in init script. Refs #5305 Conflicts: debian/icinga2-common.icinga2.init --- debian/icinga2-common.icinga2.init | 193 +++++++++++++++-------------- 1 file changed, 97 insertions(+), 96 deletions(-) diff --git a/debian/icinga2-common.icinga2.init b/debian/icinga2-common.icinga2.init index e3be727ac..bd5561c0c 100644 --- a/debian/icinga2-common.icinga2.init +++ b/debian/icinga2-common.icinga2.init @@ -40,18 +40,18 @@ SCRIPTNAME=/etc/init.d/$NAME # check run directory check_run () { - test -d '/var/run/icinga2' || mkdir /var/run/icinga2 - test -d '/var/run/icinga2/cmd' || mkdir /var/run/icinga2/cmd + test -d '/var/run/icinga2' || mkdir /var/run/icinga2 + test -d '/var/run/icinga2/cmd' || mkdir /var/run/icinga2/cmd - chown nagios:nagios /var/run/icinga2 - chmod 0755 /var/run/icinga2 + chown nagios:nagios /var/run/icinga2 + chmod 0755 /var/run/icinga2 - chown nagios:www-data /var/run/icinga2/cmd - chmod 2710 /var/run/icinga2/cmd + chown nagios:www-data /var/run/icinga2/cmd + chmod 2710 /var/run/icinga2/cmd } check_config () { - $DAEMON --validate -u "$DAEMON_USER" -g "$DAEMON_GROUP" -c "$DAEMON_CONFIG" + $DAEMON --validate -u "$DAEMON_USER" -g "$DAEMON_GROUP" -c "$DAEMON_CONFIG" } # @@ -59,18 +59,18 @@ check_config () { # do_start() { - # Return - # 0 if daemon has been started - # 1 if daemon was already running - # 2 if daemon could not be started - start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ - || return 1 - start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ - -c "$DAEMON_CONFIG" -u "$DAEMON_USER" -g "$DAEMON_GROUP" -d $DAEMON_ARGS \ - || return 2 - # Add code here, if necessary, that waits for the process to be ready - # to handle requests from services started subsequently which depend - # on this one. As a last resort, sleep for some time. + # Return + # 0 if daemon has been started + # 1 if daemon was already running + # 2 if daemon could not be started + start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ + || return 1 + start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ + -c "$DAEMON_CONFIG" -u "$DAEMON_USER" -g "$DAEMON_GROUP" -d $DAEMON_ARGS \ + || return 2 + # Add code here, if necessary, that waits for the process to be ready + # to handle requests from services started subsequently which depend + # on this one. As a last resort, sleep for some time. } # @@ -78,52 +78,52 @@ do_start() # do_stop() { - # Return - # 0 if daemon has been stopped - # 1 if daemon was already stopped - # 2 if daemon could not be stopped - # other if a failure occurred - start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME - RETVAL="$?" - [ "$RETVAL" = 2 ] && return 2 - # Wait for children to finish too if this is a daemon that forks - # and if the daemon is only ever run from this initscript. - # If the above conditions are not satisfied then add some other code - # that waits for the process to drop all resources that could be - # needed by services started subsequently. A last resort is to - # sleep for some time. - start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON - [ "$?" = 2 ] && return 2 - # Many daemons don't delete their pidfiles when they exit. - rm -f $PIDFILE - return "$RETVAL" + # Return + # 0 if daemon has been stopped + # 1 if daemon was already stopped + # 2 if daemon could not be stopped + # other if a failure occurred + start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME + RETVAL="$?" + [ "$RETVAL" = 2 ] && return 2 + # Wait for children to finish too if this is a daemon that forks + # and if the daemon is only ever run from this initscript. + # If the above conditions are not satisfied then add some other code + # that waits for the process to drop all resources that could be + # needed by services started subsequently. A last resort is to + # sleep for some time. + start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON + [ "$?" = 2 ] && return 2 + # Many daemons don't delete their pidfiles when they exit. + rm -f $PIDFILE + return "$RETVAL" } # # Function that sends a SIGHUP to the daemon/service # do_reload() { - # - # If the daemon can reload its configuration without - # restarting (for example, when it is sent a SIGHUP), - # then implement that here. - # - start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME - return 0 + # + # If the daemon can reload its configuration without + # restarting (for example, when it is sent a SIGHUP), + # then implement that here. + # + start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME + return 0 } do_check_config () { - DOEXITONOK="$1" - log_begin_msg "checking Icinga2 configuration" - if ! check_config >/dev/null 2>&1; then - echo - check_config - log_failure_msg "checking Icinga2 configuration" - exit 1 - else - log_end_msg 0 - [ -n "$DOEXITONOK" ] && exit 0 - fi + DOEXITONOK="$1" + log_begin_msg "checking Icinga2 configuration" + if ! check_config >/dev/null 2>&1; then + echo + check_config + log_failure_msg "checking Icinga2 configuration" + exit 1 + else + log_end_msg 0 + [ -n "$DOEXITONOK" ] && exit 0 + fi } check_run @@ -131,56 +131,57 @@ check_run case "$1" in start) do_check_config - log_daemon_msg "Starting $DESC" "$NAME" - do_start - case "$?" in - 0|1) log_end_msg 0 ;; - 2) log_end_msg 1 ;; - esac - ;; + log_daemon_msg "Starting $DESC" "$NAME" + do_start + case "$?" in + 0|1) log_end_msg 0 ;; + 2) log_end_msg 1 ;; + esac + ;; stop) - log_daemon_msg "Stopping $DESC" "$NAME" - do_stop - case "$?" in - 0|1) log_end_msg 0 ;; - 2) log_end_msg 1 ;; - esac - ;; + log_daemon_msg "Stopping $DESC" "$NAME" + do_stop + case "$?" in + 0|1) log_end_msg 0 ;; + 2) log_end_msg 1 ;; + esac + ;; status) - status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? - ;; + status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? + ;; reload|force-reload) do_check_config - log_daemon_msg "Reloading $DESC" "$NAME" - do_reload - log_end_msg $? - ;; + log_daemon_msg "Reloading $DESC" "$NAME" + do_reload + log_end_msg $? + ;; restart) do_check_config - log_daemon_msg "Restarting $DESC" "$NAME" - do_stop - case "$?" in - 0|1) - do_start - case "$?" in - 0) log_end_msg 0 ;; - 1) log_end_msg 1 ;; # Old process is still running - *) log_end_msg 1 ;; # Failed to start - esac - ;; - *) - # Failed to stop - log_end_msg 1 - ;; - esac - ;; + log_daemon_msg "Restarting $DESC" "$NAME" + do_stop + case "$?" in + 0|1) + do_start + case "$?" in + 0) log_end_msg 0 ;; + 1) log_end_msg 1 ;; # Old process is still running + *) log_end_msg 1 ;; # Failed to start + esac + ;; + *) + # Failed to stop + log_end_msg 1 + ;; + esac + ;; checkconfig) do_check_config 1 ;; *) - echo "Usage: $SCRIPTNAME {start|stop|status|reload|force-reload|restart|checkconfig}" >&2 - exit 3 - ;; + echo "Usage: $SCRIPTNAME {start|stop|status|reload|force-reload|restart|checkconfig}" >&2 + exit 3 + ;; esac +# vi: ts=2 sw=2 expandtab : : From f2909b80fdb62e304d4d01c8f52b2fae3a12d161 Mon Sep 17 00:00:00 2001 From: Markus Frosch Date: Wed, 11 Dec 2013 16:07:46 +0100 Subject: [PATCH 3/3] Debian: Added foreground init helper to debug Icinga 2. Refs #5305 --- debian/icinga2-common.icinga2.init | 47 +++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/debian/icinga2-common.icinga2.init b/debian/icinga2-common.icinga2.init index bd5561c0c..f64bb3b1c 100644 --- a/debian/icinga2-common.icinga2.init +++ b/debian/icinga2-common.icinga2.init @@ -73,6 +73,18 @@ do_start() # on this one. As a last resort, sleep for some time. } +# +# Function that starts the daemon/service in foreground for debugging +# +do_foreground() +{ + start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test \ + || return 1 + start-stop-daemon --start --pidfile $PIDFILE --exec $DAEMON -- \ + -c "$DAEMON_CONFIG" -u "$DAEMON_USER" -g "$DAEMON_GROUP" $DAEMON_ARGS \ + || return 2 +} + # # Function that stops the daemon/service # @@ -138,6 +150,39 @@ case "$1" in 2) log_end_msg 1 ;; esac ;; + foreground) + do_check_config + log_action_msg "Starting $DESC in foreground" + status=0 + trap 'status=2;' INT # handle intr here + for i in 1 2; do + do_foreground || status="$?" + case "$status" in + 0) + log_success_msg "$NAME ended graceful" + break + ;; + 1) + if [ "$i" -eq 1 ]; then + log_warning_msg "$NAME already running!" + log_begin_msg "Do you want to stop $NAME before going foreground? [y/N] " + read -r question + if [ "$question" = "y" ] || [ "$question" = "yes" ]; then + do_stop + continue + fi + fi + log_failure_msg "$NAME already running! Please stop before starting in foreground!" + break + ;; + 2) + log_failure_msg "$NAME ended" + break + ;; + esac + done + exit $status + ;; stop) log_daemon_msg "Stopping $DESC" "$NAME" do_stop @@ -178,7 +223,7 @@ case "$1" in do_check_config 1 ;; *) - echo "Usage: $SCRIPTNAME {start|stop|status|reload|force-reload|restart|checkconfig}" >&2 + echo "Usage: $SCRIPTNAME {start|stop|status|reload|force-reload|restart|checkconfig|foreground}" >&2 exit 3 ;; esac