1#!/bin/sh 2# 3# chkconfig: 35 90 12 4# description: Icinga 2 5# 6### BEGIN INIT INFO 7# Provides: icinga2 8# Required-Start: $remote_fs $syslog $network 9# Required-Stop: $remote_fs $syslog $network 10# Should-Start: mysql postgresql 11# Should-Stop: mysql postgresql 12# Default-Start: 2 3 5 13# Default-Stop: 0 1 6 14# Short-Description: icinga2 host/service/network monitoring and management system 15# Description: Icinga 2 is a monitoring and management system for hosts, services and networks. 16### END INIT INFO 17 18# Get function from functions library 19if [ -f /etc/rc.d/init.d/functions ]; then 20 . /etc/rc.d/init.d/functions 21elif [ -f /etc/init.d/functions ]; then 22 . /etc/init.d/functions 23fi 24 25# load system specific defines 26SYSCONFIGFILE=@ICINGA2_SYSCONFIGFILE@ 27if [ -f "$SYSCONFIGFILE" ]; then 28 . "$SYSCONFIGFILE" 29else 30 echo "Couldn't load system specific defines from $SYSCONFIGFILE. Using defaults." 31fi 32 33# Set defaults, to overwrite see "@ICINGA2_SYSCONFIGFILE@" 34 35: "${ICINGA2_USER:="@ICINGA2_USER@"}" 36: "${ICINGA2_GROUP:="@ICINGA2_GROUP@"}" 37: "${ICINGA2_COMMAND_GROUP:="@ICINGA2_COMMAND_GROUP@"}" 38: "${DAEMON:="@CMAKE_INSTALL_FULL_SBINDIR@/icinga2"}" 39: "${ICINGA2_CONFIG_FILE:="@ICINGA2_CONFIGDIR@/icinga2.conf"}" 40: "${ICINGA2_ERROR_LOG:=@ICINGA2_LOGDIR@/error.log}" 41: "${ICINGA2_STARTUP_LOG:=@ICINGA2_LOGDIR@/startup.log}" 42: "${ICINGA2_PID_FILE:="@ICINGA2_INITRUNDIR@/icinga2.pid"}" 43 44# Load extra environment variables 45if [ -f /etc/default/icinga2 ]; then 46 . /etc/default/icinga2 47fi 48 49test -x "$DAEMON" || exit 5 50 51if [ ! -e "$ICINGA2_CONFIG_FILE" ]; then 52 echo "Config file '$ICINGA2_CONFIG_FILE' does not exist." 53 exit 6 54fi 55 56if ! getent passwd "$ICINGA2_USER" >/dev/null 2>&1; then 57 echo "Icinga user '$ICINGA2_USER' does not exist. Exiting." 58 exit 6 59fi 60 61if ! getent group "$ICINGA2_GROUP" >/dev/null 2>&1; then 62 echo "Icinga group '$ICINGA2_GROUP' does not exist. Exiting." 63 exit 6 64fi 65 66if ! getent group "$ICINGA2_COMMAND_GROUP" >/dev/null 2>&1; then 67 echo "Icinga command group '$ICINGA2_COMMAND_GROUP' does not exist. Exiting." 68 exit 6 69fi 70 71# Start Icinga 2 72start() { 73 printf "Starting Icinga 2: " 74 @CMAKE_INSTALL_PREFIX@/lib/icinga2/prepare-dirs "$SYSCONFIGFILE" 75 76 if ! "$DAEMON" daemon -c "$ICINGA2_CONFIG_FILE" -d -e "$ICINGA2_ERROR_LOG" > "$ICINGA2_STARTUP_LOG" 2>&1; then 77 echo "Error starting Icinga. Check '$ICINGA2_STARTUP_LOG' for details." 78 exit 1 79 else 80 echo "Done" 81 fi 82} 83 84# Restart Icinga 2 85stop() { 86 printf "Stopping Icinga 2: " 87 88 if [ ! -e "$ICINGA2_PID_FILE" ]; then 89 echo "The PID file '$ICINGA2_PID_FILE' does not exist." 90 if [ "x$1" = "xnofail" ]; then 91 return 92 else 93 exit 7 94 fi 95 fi 96 97 pid=`cat "$ICINGA2_PID_FILE"` 98 99 if icinga2 internal signal -s SIGINT -p "$pid" >/dev/null 2>&1; then 100 for i in 1 2 3 4 5 6 7 8 9 10; do 101 if ! icinga2 internal signal -s SIGCHLD -p "$pid" >/dev/null 2>&1; then 102 break 103 fi 104 105 printf '.' 106 sleep 3 107 done 108 fi 109 110 if icinga2 internal signal -s SIGCHLD -p "$pid" >/dev/null 2>&1; then 111 icinga2 internal signal -s SIGKILL -p "$pid" >/dev/null 2>&1 112 fi 113 114 echo "Done" 115} 116 117# Reload Icinga 2 118reload() { 119 exec @CMAKE_INSTALL_PREFIX@/lib/icinga2/safe-reload "$SYSCONFIGFILE" 120} 121 122# Check the Icinga 2 configuration 123checkconfig() { 124 printf "Checking configuration: " 125 126 if ! "$DAEMON" daemon -c "$ICINGA2_CONFIG_FILE" -C > "$ICINGA2_STARTUP_LOG" 2>&1; then 127 if [ "x$1" = "x" ]; then 128 cat "$ICINGA2_STARTUP_LOG" 129 echo "Icinga 2 detected configuration errors. Check '$ICINGA2_STARTUP_LOG' for details." 130 exit 1 131 else 132 echo "Not ${1}ing Icinga 2 due to configuration errors. Check '$ICINGA2_STARTUP_LOG' for details." 133 if [ "x$2" = "xfail" ]; then 134 exit 1 135 fi 136 fi 137 fi 138 139 echo "Done" 140 # no arguments requires full output 141 if [ "x$1" = "x" ]; then 142 cat "$ICINGA2_STARTUP_LOG" 143 fi 144} 145 146# Print status for Icinga 2 147status() { 148 printf "Icinga 2 status: " 149 150 if [ ! -e "$ICINGA2_PID_FILE" ]; then 151 echo "Not running" 152 exit 3 153 fi 154 155 pid=`cat "$ICINGA2_PID_FILE"` 156 if icinga2 internal signal -s SIGCHLD -p "$pid" >/dev/null 2>&1; then 157 echo "Running" 158 else 159 echo "Not running" 160 exit 3 161 fi 162} 163 164### main logic ### 165case "$1" in 166 start) 167 checkconfig start fail 168 start 169 ;; 170 stop) 171 stop 172 ;; 173 status) 174 status 175 ;; 176 restart) 177 checkconfig restart fail 178 stop nofail 179 start 180 ;; 181 condrestart) 182 status > /dev/null 2>&1 || exit 0 183 checkconfig restart fail 184 stop nofail 185 start 186 ;; 187 reload) 188 reload 189 ;; 190 checkconfig) 191 checkconfig 192 ;; 193 *) 194 echo "Usage: $0 {start|stop|restart|reload|checkconfig|status}" 195 exit 3 196esac 197 198exit 0 199