1*c18ec02fSPetter Reinholdtsen#!/bin/bash 2*c18ec02fSPetter Reinholdtsen# 3*c18ec02fSPetter Reinholdtsen# System startup script for ipmievd 4*c18ec02fSPetter Reinholdtsen# Based on skeleton.compat example script 5*c18ec02fSPetter Reinholdtsen# Copyright (C) 1995--2005 Kurt Garloff, SUSE / Novell Inc. 6*c18ec02fSPetter Reinholdtsen# 7*c18ec02fSPetter Reinholdtsen# This library is free software; you can redistribute it and/or modify it 8*c18ec02fSPetter Reinholdtsen# under the terms of the GNU Lesser General Public License as published by 9*c18ec02fSPetter Reinholdtsen# the Free Software Foundation; either version 2.1 of the License, or (at 10*c18ec02fSPetter Reinholdtsen# your option) any later version. 11*c18ec02fSPetter Reinholdtsen# 12*c18ec02fSPetter Reinholdtsen# This library is distributed in the hope that it will be useful, but 13*c18ec02fSPetter Reinholdtsen# WITHOUT ANY WARRANTY; without even the implied warranty of 14*c18ec02fSPetter Reinholdtsen# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15*c18ec02fSPetter Reinholdtsen# Lesser General Public License for more details. 16*c18ec02fSPetter Reinholdtsen# 17*c18ec02fSPetter Reinholdtsen# You should have received a copy of the GNU Lesser General Public 18*c18ec02fSPetter Reinholdtsen# License along with this library; if not, write to the Free Software 19*c18ec02fSPetter Reinholdtsen# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, 20*c18ec02fSPetter Reinholdtsen# USA. 21*c18ec02fSPetter Reinholdtsen# 22*c18ec02fSPetter Reinholdtsen# Note: This template uses functions rc_XXX defined in /etc/rc.status on 23*c18ec02fSPetter Reinholdtsen# UnitedLinux/SUSE/Novell based Linux distributions. However, it will work 24*c18ec02fSPetter Reinholdtsen# on other distributions as well, by using the LSB (Linux Standard Base) 25*c18ec02fSPetter Reinholdtsen# or RH functions or by open coding the needed functions. 26*c18ec02fSPetter Reinholdtsen# Read http://www.tldp.org/HOWTO/HighQuality-Apps-HOWTO/ if you prefer not 27*c18ec02fSPetter Reinholdtsen# to use this template. 28*c18ec02fSPetter Reinholdtsen# 29*c18ec02fSPetter Reinholdtsen# chkconfig: 345 99 00 30*c18ec02fSPetter Reinholdtsen# description: ipmievd daemon 31*c18ec02fSPetter Reinholdtsen# 32*c18ec02fSPetter Reinholdtsen### BEGIN INIT INFO 33*c18ec02fSPetter Reinholdtsen# Provides: ipmievd 34*c18ec02fSPetter Reinholdtsen# Required-Start: $syslog ipmi 35*c18ec02fSPetter Reinholdtsen# Should-Start: $time 36*c18ec02fSPetter Reinholdtsen# Required-Stop: $syslog ipmi 37*c18ec02fSPetter Reinholdtsen# Should-Stop: $time 38*c18ec02fSPetter Reinholdtsen# Default-Start: 3 4 5 39*c18ec02fSPetter Reinholdtsen# Default-Stop: 0 1 2 6 40*c18ec02fSPetter Reinholdtsen# Short-Description: ipmievd daemon to send events to syslog 41*c18ec02fSPetter Reinholdtsen# Description: Start ipmievd to read events from BMC and 42*c18ec02fSPetter Reinholdtsen# log them to syslog. Events correspond to hardware faults, 43*c18ec02fSPetter Reinholdtsen# state transitions such as power on and off, and sensor 44*c18ec02fSPetter Reinholdtsen# readings such as temperature, voltage and fan speed that 45*c18ec02fSPetter Reinholdtsen# are abnormal. 46*c18ec02fSPetter Reinholdtsen### END INIT INFO 47*c18ec02fSPetter Reinholdtsen# 48*c18ec02fSPetter Reinholdtsen 49*c18ec02fSPetter Reinholdtsen# Check for missing binaries (stale symlinks should not happen) 50*c18ec02fSPetter Reinholdtsen# Note: Special treatment of stop for LSB conformance 51*c18ec02fSPetter ReinholdtsenIPMIEVD_BIN=/usr/sbin/ipmievd 52*c18ec02fSPetter Reinholdtsentest -x $IPMIEVD_BIN || { echo "$IPMIEVD_BIN not installed"; 53*c18ec02fSPetter Reinholdtsen if [ "$1" = "stop" ]; then exit 0; 54*c18ec02fSPetter Reinholdtsen else exit 5; fi; } 55*c18ec02fSPetter Reinholdtsen 56*c18ec02fSPetter Reinholdtsen# Check for existence of needed config file and read it 57*c18ec02fSPetter ReinholdtsenIPMIEVD_CONFIG=/etc/sysconfig/ipmievd 58*c18ec02fSPetter Reinholdtsentest -r $IPMIEVD_CONFIG || { echo "$IPMIEVD_CONFIG does not exist"; 59*c18ec02fSPetter Reinholdtsen if [ "$1" = "stop" ]; then exit 0; 60*c18ec02fSPetter Reinholdtsen else exit 6; fi; } 61*c18ec02fSPetter Reinholdtsen 62*c18ec02fSPetter Reinholdtsen# Read config 63*c18ec02fSPetter Reinholdtsen. $IPMIEVD_CONFIG 64*c18ec02fSPetter Reinholdtsen 65*c18ec02fSPetter Reinholdtsenif test -e /etc/rc.status; then 66*c18ec02fSPetter Reinholdtsen # SUSE rc script library 67*c18ec02fSPetter Reinholdtsen . /etc/rc.status 68*c18ec02fSPetter Reinholdtsenelse 69*c18ec02fSPetter Reinholdtsen export LC_ALL=POSIX 70*c18ec02fSPetter Reinholdtsen _cmd=$1 71*c18ec02fSPetter Reinholdtsen declare -a _SMSG 72*c18ec02fSPetter Reinholdtsen if test "${_cmd}" = "status"; then 73*c18ec02fSPetter Reinholdtsen _SMSG=(running dead dead unused unknown reserved) 74*c18ec02fSPetter Reinholdtsen _RC_UNUSED=3 75*c18ec02fSPetter Reinholdtsen else 76*c18ec02fSPetter Reinholdtsen _SMSG=(done failed failed missed failed skipped unused failed failed reserved) 77*c18ec02fSPetter Reinholdtsen _RC_UNUSED=6 78*c18ec02fSPetter Reinholdtsen fi 79*c18ec02fSPetter Reinholdtsen if test -e /lib/lsb/init-functions; then 80*c18ec02fSPetter Reinholdtsen # LSB 81*c18ec02fSPetter Reinholdtsen . /lib/lsb/init-functions 82*c18ec02fSPetter Reinholdtsen echo_rc() 83*c18ec02fSPetter Reinholdtsen { 84*c18ec02fSPetter Reinholdtsen if test ${_RC_RV} = 0; then 85*c18ec02fSPetter Reinholdtsen log_success_msg " [${_SMSG[${_RC_RV}]}] " 86*c18ec02fSPetter Reinholdtsen else 87*c18ec02fSPetter Reinholdtsen log_failure_msg " [${_SMSG[${_RC_RV}]}] " 88*c18ec02fSPetter Reinholdtsen fi 89*c18ec02fSPetter Reinholdtsen } 90*c18ec02fSPetter Reinholdtsen # TODO: Add checking for lockfiles 91*c18ec02fSPetter Reinholdtsen checkproc() { return pidofproc ${1+"$@"} >/dev/null 2>&1; } 92*c18ec02fSPetter Reinholdtsen elif test -e /etc/init.d/functions; then 93*c18ec02fSPetter Reinholdtsen # RHAT 94*c18ec02fSPetter Reinholdtsen . /etc/init.d/functions 95*c18ec02fSPetter Reinholdtsen echo_rc() 96*c18ec02fSPetter Reinholdtsen { 97*c18ec02fSPetter Reinholdtsen #echo -n " [${_SMSG[${_RC_RV}]}] " 98*c18ec02fSPetter Reinholdtsen if test ${_RC_RV} = 0; then 99*c18ec02fSPetter Reinholdtsen success " [${_SMSG[${_RC_RV}]}] " 100*c18ec02fSPetter Reinholdtsen else 101*c18ec02fSPetter Reinholdtsen failure " [${_SMSG[${_RC_RV}]}] " 102*c18ec02fSPetter Reinholdtsen fi 103*c18ec02fSPetter Reinholdtsen } 104*c18ec02fSPetter Reinholdtsen checkproc() { return status ${1+"$@"}; } 105*c18ec02fSPetter Reinholdtsen start_daemon() { return daemon ${1+"$@"}; } 106*c18ec02fSPetter Reinholdtsen else 107*c18ec02fSPetter Reinholdtsen # emulate it 108*c18ec02fSPetter Reinholdtsen echo_rc() { echo " [${_SMSG[${_RC_RV}]}] "; } 109*c18ec02fSPetter Reinholdtsen fi 110*c18ec02fSPetter Reinholdtsen rc_reset() { _RC_RV=0; } 111*c18ec02fSPetter Reinholdtsen rc_failed() 112*c18ec02fSPetter Reinholdtsen { 113*c18ec02fSPetter Reinholdtsen if test -z "$1"; then 114*c18ec02fSPetter Reinholdtsen _RC_RV=1; 115*c18ec02fSPetter Reinholdtsen elif test "$1" != "0"; then 116*c18ec02fSPetter Reinholdtsen _RC_RV=$1; 117*c18ec02fSPetter Reinholdtsen fi 118*c18ec02fSPetter Reinholdtsen return ${_RC_RV} 119*c18ec02fSPetter Reinholdtsen } 120*c18ec02fSPetter Reinholdtsen rc_check() 121*c18ec02fSPetter Reinholdtsen { 122*c18ec02fSPetter Reinholdtsen return rc_failed $? 123*c18ec02fSPetter Reinholdtsen } 124*c18ec02fSPetter Reinholdtsen rc_status() 125*c18ec02fSPetter Reinholdtsen { 126*c18ec02fSPetter Reinholdtsen rc_failed $? 127*c18ec02fSPetter Reinholdtsen if test "$1" = "-r"; then _RC_RV=0; shift; fi 128*c18ec02fSPetter Reinholdtsen if test "$1" = "-s"; then rc_failed 5; echo_rc; rc_failed 3; shift; fi 129*c18ec02fSPetter Reinholdtsen if test "$1" = "-u"; then rc_failed ${_RC_UNUSED}; echo_rc; rc_failed 3; shift; fi 130*c18ec02fSPetter Reinholdtsen if test "$1" = "-v"; then echo_rc; shift; fi 131*c18ec02fSPetter Reinholdtsen if test "$1" = "-r"; then _RC_RV=0; shift; fi 132*c18ec02fSPetter Reinholdtsen return ${_RC_RV} 133*c18ec02fSPetter Reinholdtsen } 134*c18ec02fSPetter Reinholdtsen rc_exit() { exit ${_RC_RV}; } 135*c18ec02fSPetter Reinholdtsen rc_active() 136*c18ec02fSPetter Reinholdtsen { 137*c18ec02fSPetter Reinholdtsen if test -z "$RUNLEVEL"; then read RUNLEVEL REST < <(/sbin/runlevel); fi 138*c18ec02fSPetter Reinholdtsen if test -e /etc/init.d/S[0-9][0-9]${1}; then return 0; fi 139*c18ec02fSPetter Reinholdtsen return 1 140*c18ec02fSPetter Reinholdtsen } 141*c18ec02fSPetter Reinholdtsenfi 142*c18ec02fSPetter Reinholdtsen 143*c18ec02fSPetter Reinholdtsen# Reset status of this service 144*c18ec02fSPetter Reinholdtsenrc_reset 145*c18ec02fSPetter Reinholdtsen 146*c18ec02fSPetter Reinholdtsen# Return values acc. to LSB for all commands but status: 147*c18ec02fSPetter Reinholdtsen# 0 - success 148*c18ec02fSPetter Reinholdtsen# 1 - generic or unspecified error 149*c18ec02fSPetter Reinholdtsen# 2 - invalid or excess argument(s) 150*c18ec02fSPetter Reinholdtsen# 3 - unimplemented feature (e.g. "reload") 151*c18ec02fSPetter Reinholdtsen# 4 - user had insufficient privileges 152*c18ec02fSPetter Reinholdtsen# 5 - program is not installed 153*c18ec02fSPetter Reinholdtsen# 6 - program is not configured 154*c18ec02fSPetter Reinholdtsen# 7 - program is not running 155*c18ec02fSPetter Reinholdtsen# 8--199 - reserved (8--99 LSB, 100--149 distrib, 150--199 appl) 156*c18ec02fSPetter Reinholdtsen# 157*c18ec02fSPetter Reinholdtsen# Note that starting an already running service, stopping 158*c18ec02fSPetter Reinholdtsen# or restarting a not-running service as well as the restart 159*c18ec02fSPetter Reinholdtsen# with force-reload (in case signaling is not supported) are 160*c18ec02fSPetter Reinholdtsen# considered a success. 161*c18ec02fSPetter Reinholdtsen 162*c18ec02fSPetter Reinholdtsencase "$1" in 163*c18ec02fSPetter Reinholdtsen start) 164*c18ec02fSPetter Reinholdtsen echo -n "Starting ipmievd " 165*c18ec02fSPetter Reinholdtsen start_daemon $IPMIEVD_BIN $IPMIEVD_OPTIONS 166*c18ec02fSPetter Reinholdtsen rc_status -v 167*c18ec02fSPetter Reinholdtsen ;; 168*c18ec02fSPetter Reinholdtsen stop) 169*c18ec02fSPetter Reinholdtsen echo -n "Shutting down ipmievd " 170*c18ec02fSPetter Reinholdtsen killproc -TERM $IPMIEVD_BIN 171*c18ec02fSPetter Reinholdtsen rc_status -v 172*c18ec02fSPetter Reinholdtsen ;; 173*c18ec02fSPetter Reinholdtsen try-restart|condrestart) 174*c18ec02fSPetter Reinholdtsen ## Do a restart only if the service was active before. 175*c18ec02fSPetter Reinholdtsen ## Note: try-restart is now part of LSB (as of 1.9). 176*c18ec02fSPetter Reinholdtsen ## RH has a similar command named condrestart. 177*c18ec02fSPetter Reinholdtsen if test "$1" = "condrestart"; then 178*c18ec02fSPetter Reinholdtsen echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}" 179*c18ec02fSPetter Reinholdtsen fi 180*c18ec02fSPetter Reinholdtsen $0 status 181*c18ec02fSPetter Reinholdtsen if test $? = 0; then 182*c18ec02fSPetter Reinholdtsen $0 restart 183*c18ec02fSPetter Reinholdtsen else 184*c18ec02fSPetter Reinholdtsen rc_reset # Not running is not a failure. 185*c18ec02fSPetter Reinholdtsen fi 186*c18ec02fSPetter Reinholdtsen rc_status 187*c18ec02fSPetter Reinholdtsen ;; 188*c18ec02fSPetter Reinholdtsen restart) 189*c18ec02fSPetter Reinholdtsen $0 stop 190*c18ec02fSPetter Reinholdtsen $0 start 191*c18ec02fSPetter Reinholdtsen rc_status 192*c18ec02fSPetter Reinholdtsen ;; 193*c18ec02fSPetter Reinholdtsen force-reload) 194*c18ec02fSPetter Reinholdtsen echo -n "Reload service ipmievd " 195*c18ec02fSPetter Reinholdtsen $0 try-restart 196*c18ec02fSPetter Reinholdtsen rc_status 197*c18ec02fSPetter Reinholdtsen ;; 198*c18ec02fSPetter Reinholdtsen reload) 199*c18ec02fSPetter Reinholdtsen rc_failed 3 200*c18ec02fSPetter Reinholdtsen rc_status -v 201*c18ec02fSPetter Reinholdtsen ;; 202*c18ec02fSPetter Reinholdtsen status) 203*c18ec02fSPetter Reinholdtsen echo -n "Checking for service ipmievd " 204*c18ec02fSPetter Reinholdtsen checkproc $IPMIEVD_BIN 205*c18ec02fSPetter Reinholdtsen rc_status -v 206*c18ec02fSPetter Reinholdtsen ;; 207*c18ec02fSPetter Reinholdtsen *) 208*c18ec02fSPetter Reinholdtsen echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload| reload}" 209*c18ec02fSPetter Reinholdtsen exit 1 210*c18ec02fSPetter Reinholdtsen ;; 211*c18ec02fSPetter Reinholdtsenesac 212*c18ec02fSPetter Reinholdtsenrc_exit 213