171 lines
3.9 KiB
Bash
Executable file
171 lines
3.9 KiB
Bash
Executable file
#! /bin/sh
|
|
#
|
|
# ups: Starts the Network UPS Tools
|
|
#
|
|
# chkconfig: - 26 74
|
|
# description: Network UPS Tools is a collection of programs which provide a common \
|
|
# interface for monitoring and administering UPS hardware.
|
|
# processname: upsd
|
|
# config: /usr/local/ups/etc
|
|
# config: /etc/rc.ups
|
|
#
|
|
### BEGIN INIT INFO
|
|
# Provides: ups
|
|
# Required-Start: $syslog $network $named
|
|
# Required-Stop: $local_fs
|
|
# Default-Stop: 0 1 6
|
|
# Short-Description: Starts the Network UPS tools
|
|
# Description: Network UPS Tools is a collection of programs which provide a common \
|
|
# interface for monitoring and administering UPS hardware.
|
|
### END INIT INFO
|
|
|
|
success() {
|
|
echo OK
|
|
}
|
|
|
|
failure() {
|
|
echo FAILED
|
|
}
|
|
|
|
# Resolve what processes should run
|
|
SERVER="no"
|
|
CLIENT="no"
|
|
|
|
NUT_DIR="@prefix@"
|
|
NUT_SBIN_DIR="${NUT_DIR}/sbin"
|
|
NUT_LIB_DIR="${NUT_DIR}/lib"
|
|
NUT_RUN_DIR="@PIDPATH@/nut"
|
|
CONFIG="@CONFPATH@/nut.conf"
|
|
NUTUSER="@RUN_AS_USER@"
|
|
NUTGROUP="@RUN_AS_GROUP@"
|
|
NUT_VAR_LOCK="/var/locks/ups"
|
|
|
|
if [ -f "$CONFIG" ] ; then
|
|
. "$CONFIG"
|
|
|
|
case "$MODE" in
|
|
standalone|netserver)
|
|
SERVER="yes"
|
|
;;
|
|
esac
|
|
|
|
rpm -q nut-client >/dev/null 2>&1 && CLIENT="yes"
|
|
fi
|
|
|
|
do_start() {
|
|
RETVAL=0
|
|
|
|
if [ ! -d "$NUT_RUN_DIR" ]; then
|
|
mkdir -p "$NUT_RUN_DIR" && \
|
|
chown "root:$NUTGROUP" "$NUT_RUN_DIR" && \
|
|
chmod 770 "$NUT_RUN_DIR"
|
|
RETVAL=$?
|
|
fi
|
|
|
|
if [ "$SERVER" = "yes" ]; then
|
|
echo "Starting UPS driver controller: \c"
|
|
LD_LIBRARY_PATH="${NUT_LIB_DIR}:$LD_LIBRARY_PATH" "${NUT_SBIN_DIR}"/upsdrvctl start >/dev/null 2>&1 && success || { RETVAL=$?; failure; }
|
|
|
|
echo "Starting upsd: \c"
|
|
LD_LIBRARY_PATH="${NUT_LIB_DIR}:$LD_LIBRARY_PATH" "${NUT_SBIN_DIR}"/upsd $UPSD_OPTIONS >/dev/null 2>&1 && success || { RETVAL=$?; failure; }
|
|
fi
|
|
|
|
if [ "$CLIENT" = "yes" ]; then
|
|
echo "Starting UPS monitor: \c"
|
|
LD_LIBRARY_PATH="${NUT_LIB_DIR}:$LD_LIBRARY_PATH" "${NUT_SBIN_DIR}"/upsmon >/dev/null 2>&1 && success || { RETVAL=$?; failure; }
|
|
fi
|
|
|
|
[ "$RETVAL" = 0 ] && touch "${NUT_VAR_LOCK}"
|
|
return $RETVAL
|
|
}
|
|
|
|
do_stop() {
|
|
RETVAL=0
|
|
if test -e "${NUT_RUN_DIR}"/upsmon.pid; then
|
|
echo "Stopping UPS monitor: \c"
|
|
PID="`cat "${NUT_RUN_DIR}"/upsmon.pid`"
|
|
kill -15 $PID && success || { RETVAL=$?; failure; }
|
|
rm "${NUT_RUN_DIR}"/upsmon.pid
|
|
fi
|
|
|
|
if [ "$SERVER" = "yes" ]; then
|
|
if test -e "${NUT_RUN_DIR}"/upsd.pid; then
|
|
echo "Stopping upsd: \c"
|
|
PID="`cat "${NUT_RUN_DIR}"/upsd.pid`"
|
|
kill -15 $PID && success || { RETVAL=$?; failure; }
|
|
rm "${NUT_RUN_DIR}"/upsd.pid
|
|
fi
|
|
|
|
echo "Shutting down UPS driver controller: \c"
|
|
"${NUT_SBIN_DIR}"/upsdrvctl stop > /dev/null 2>&1 && success || { RETVAL=$?; failure; }
|
|
fi
|
|
[ "$RETVAL" = 0 ] && rm -f "${NUT_VAR_LOCK}"
|
|
return $RETVAL
|
|
}
|
|
|
|
do_restart() {
|
|
do_stop
|
|
waitmore=5
|
|
while [ -n "$(ls "${NUT_RUN_DIR}"/)" -a $waitmore -ge 1 ]
|
|
do
|
|
sleep 1
|
|
waitmore="$(expr $waitmore - 1)"
|
|
done
|
|
do_start
|
|
}
|
|
|
|
do_reload() {
|
|
# FIXME: upsd and upsmon always return 0
|
|
# => can't tell if reload was successful
|
|
RETVAL=0
|
|
if [ "$SERVER" = "yes" ]; then
|
|
echo "Reloading upsd"
|
|
LD_LIBRARY_PATH="${NUT_LIB_DIR}:$LD_LIBRARY_PATH" "${NUT_SBIN_DIR}"/upsd -c reload && success || { RETVAL=$?; failure; }
|
|
fi
|
|
|
|
echo "Reloading upsmon"
|
|
LD_LIBRARY_PATH="${NUT_LIB_DIR}:$LD_LIBRARY_PATH" "${NUT_SBIN_DIR}"/upsmon -c reload && success || { RETVAL=$?; failure; }
|
|
return $RETVAL
|
|
}
|
|
|
|
# See how we are called.
|
|
case "$1" in
|
|
start)
|
|
do_start ;;
|
|
|
|
stop)
|
|
do_stop ;;
|
|
|
|
restart)
|
|
do_restart ;;
|
|
|
|
try-restart)
|
|
[ -f "${NUT_VAR_LOCK}" ] && do_restart || true
|
|
;;
|
|
|
|
reload)
|
|
do_reload ;;
|
|
|
|
force-reload)
|
|
do_restart ;;
|
|
|
|
status)
|
|
if [ "$SERVER" = "yes" ]; then
|
|
if test -f "${NUT_VAR_LOCK}"; then
|
|
echo "upsd is running with PID" `cat "${NUT_RUN_DIR}"/upsd.pid`
|
|
fi
|
|
fi
|
|
|
|
if test -e "${NUT_RUN_DIR}"/upsmon.pid; then
|
|
echo "upsmon is running with PID" `cat "${NUT_RUN_DIR}"/upsmon.pid`
|
|
elif rpm -q nut-client >/dev/null 2>&1; then
|
|
echo "upsmon isn't running"
|
|
fi
|
|
;;
|
|
|
|
*)
|
|
echo "Usage: $0 {start|stop|restart|try-restart|reload|force-reload|status}"
|
|
RETVAL=3
|
|
esac
|
|
|
|
exit $RETVAL
|