diff options
Diffstat (limited to '')
-rw-r--r-- | etc/initsystem/icinga2.init.d.cmake | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/etc/initsystem/icinga2.init.d.cmake b/etc/initsystem/icinga2.init.d.cmake new file mode 100644 index 0000000..56588a7 --- /dev/null +++ b/etc/initsystem/icinga2.init.d.cmake @@ -0,0 +1,198 @@ +#!/bin/sh +# +# chkconfig: 35 90 12 +# description: Icinga 2 +# +### BEGIN INIT INFO +# Provides: icinga2 +# Required-Start: $remote_fs $syslog $network +# Required-Stop: $remote_fs $syslog $network +# Should-Start: mysql postgresql +# Should-Stop: mysql postgresql +# Default-Start: 2 3 5 +# Default-Stop: 0 1 6 +# Short-Description: icinga2 host/service/network monitoring and management system +# Description: Icinga 2 is a monitoring and management system for hosts, services and networks. +### END INIT INFO + +# Get function from functions library +if [ -f /etc/rc.d/init.d/functions ]; then + . /etc/rc.d/init.d/functions +elif [ -f /etc/init.d/functions ]; then + . /etc/init.d/functions +fi + +# load system specific defines +SYSCONFIGFILE=@ICINGA2_SYSCONFIGFILE@ +if [ -f "$SYSCONFIGFILE" ]; then + . "$SYSCONFIGFILE" +else + echo "Couldn't load system specific defines from $SYSCONFIGFILE. Using defaults." +fi + +# Set defaults, to overwrite see "@ICINGA2_SYSCONFIGFILE@" + +: "${ICINGA2_USER:="@ICINGA2_USER@"}" +: "${ICINGA2_GROUP:="@ICINGA2_GROUP@"}" +: "${ICINGA2_COMMAND_GROUP:="@ICINGA2_COMMAND_GROUP@"}" +: "${DAEMON:="@CMAKE_INSTALL_FULL_SBINDIR@/icinga2"}" +: "${ICINGA2_CONFIG_FILE:="@ICINGA2_CONFIGDIR@/icinga2.conf"}" +: "${ICINGA2_ERROR_LOG:=@ICINGA2_LOGDIR@/error.log}" +: "${ICINGA2_STARTUP_LOG:=@ICINGA2_LOGDIR@/startup.log}" +: "${ICINGA2_PID_FILE:="@ICINGA2_INITRUNDIR@/icinga2.pid"}" + +# Load extra environment variables +if [ -f /etc/default/icinga2 ]; then + . /etc/default/icinga2 +fi + +test -x "$DAEMON" || exit 5 + +if [ ! -e "$ICINGA2_CONFIG_FILE" ]; then + echo "Config file '$ICINGA2_CONFIG_FILE' does not exist." + exit 6 +fi + +if ! getent passwd "$ICINGA2_USER" >/dev/null 2>&1; then + echo "Icinga user '$ICINGA2_USER' does not exist. Exiting." + exit 6 +fi + +if ! getent group "$ICINGA2_GROUP" >/dev/null 2>&1; then + echo "Icinga group '$ICINGA2_GROUP' does not exist. Exiting." + exit 6 +fi + +if ! getent group "$ICINGA2_COMMAND_GROUP" >/dev/null 2>&1; then + echo "Icinga command group '$ICINGA2_COMMAND_GROUP' does not exist. Exiting." + exit 6 +fi + +# Start Icinga 2 +start() { + printf "Starting Icinga 2: " + @CMAKE_INSTALL_PREFIX@/lib/icinga2/prepare-dirs "$SYSCONFIGFILE" + + if ! "$DAEMON" daemon -c "$ICINGA2_CONFIG_FILE" -d -e "$ICINGA2_ERROR_LOG" > "$ICINGA2_STARTUP_LOG" 2>&1; then + echo "Error starting Icinga. Check '$ICINGA2_STARTUP_LOG' for details." + exit 1 + else + echo "Done" + fi +} + +# Restart Icinga 2 +stop() { + printf "Stopping Icinga 2: " + + if [ ! -e "$ICINGA2_PID_FILE" ]; then + echo "The PID file '$ICINGA2_PID_FILE' does not exist." + if [ "x$1" = "xnofail" ]; then + return + else + exit 7 + fi + fi + + pid=`cat "$ICINGA2_PID_FILE"` + + if icinga2 internal signal -s SIGINT -p "$pid" >/dev/null 2>&1; then + for i in 1 2 3 4 5 6 7 8 9 10; do + if ! icinga2 internal signal -s SIGCHLD -p "$pid" >/dev/null 2>&1; then + break + fi + + printf '.' + sleep 3 + done + fi + + if icinga2 internal signal -s SIGCHLD -p "$pid" >/dev/null 2>&1; then + icinga2 internal signal -s SIGKILL -p "$pid" >/dev/null 2>&1 + fi + + echo "Done" +} + +# Reload Icinga 2 +reload() { + exec @CMAKE_INSTALL_PREFIX@/lib/icinga2/safe-reload "$SYSCONFIGFILE" +} + +# Check the Icinga 2 configuration +checkconfig() { + printf "Checking configuration: " + + if ! "$DAEMON" daemon -c "$ICINGA2_CONFIG_FILE" -C > "$ICINGA2_STARTUP_LOG" 2>&1; then + if [ "x$1" = "x" ]; then + cat "$ICINGA2_STARTUP_LOG" + echo "Icinga 2 detected configuration errors. Check '$ICINGA2_STARTUP_LOG' for details." + exit 1 + else + echo "Not ${1}ing Icinga 2 due to configuration errors. Check '$ICINGA2_STARTUP_LOG' for details." + if [ "x$2" = "xfail" ]; then + exit 1 + fi + fi + fi + + echo "Done" + # no arguments requires full output + if [ "x$1" = "x" ]; then + cat "$ICINGA2_STARTUP_LOG" + fi +} + +# Print status for Icinga 2 +status() { + printf "Icinga 2 status: " + + if [ ! -e "$ICINGA2_PID_FILE" ]; then + echo "Not running" + exit 3 + fi + + pid=`cat "$ICINGA2_PID_FILE"` + if icinga2 internal signal -s SIGCHLD -p "$pid" >/dev/null 2>&1; then + echo "Running" + else + echo "Not running" + exit 3 + fi +} + +### main logic ### +case "$1" in + start) + checkconfig start fail + start + ;; + stop) + stop + ;; + status) + status + ;; + restart) + checkconfig restart fail + stop nofail + start + ;; + condrestart) + status > /dev/null 2>&1 || exit 0 + checkconfig restart fail + stop nofail + start + ;; + reload) + reload + ;; + checkconfig) + checkconfig + ;; + *) + echo "Usage: $0 {start|stop|restart|reload|checkconfig|status}" + exit 3 +esac + +exit 0 |