forked from peterpakos/check_perccli
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Radoslav Bodó
committed
Jun 12, 2024
1 parent
f233661
commit ad67879
Showing
6 changed files
with
210 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,15 +4,13 @@ Priority: optional | |
Maintainer: Radoslav Bodó <[email protected]> | ||
Rules-Requires-Root: no | ||
Build-Depends: | ||
debhelper-compat (= 13), | ||
debhelper-compat (= 13) | ||
Standards-Version: 4.6.2 | ||
Homepage: https://github.com/bodik/perccli-status | ||
#Vcs-Browser: https://salsa.debian.org/debian/perccli-status | ||
#Vcs-Git: https://salsa.debian.org/debian/perccli-status.git | ||
|
||
Package: perccli-status | ||
Architecture: any | ||
Depends: perccli2 | ||
Depends: perccli2, daemon | ||
Description: The perccli-status software is a query tool to access the running | ||
configuration and status of PERC SAS HBAs. | ||
. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
/usr/sbin |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,202 @@ | ||
#! /bin/sh | ||
|
||
# Author: Petter Reinholdtsen <[email protected]> | ||
# Author: Radoslav Bodó <[email protected]> | ||
# License: GNU General Public License v2 or later | ||
# | ||
### BEGIN INIT INFO | ||
# Provides: perccli-statusd | ||
# Description: Check perccli-status values in the background. | ||
# Required-Start: $remote_fs $syslog | ||
# Required-Stop: $remote_fs $syslog | ||
# Default-Start: 2 3 4 5 | ||
# Default-Stop: 0 1 6 | ||
# Short-Description: Check perccli-status values in the background. | ||
### END INIT INFO | ||
|
||
PATH=/sbin:/bin:/usr/sbin:/usr/bin | ||
DESC="perccli-status monitor" | ||
NAME=perccli-statusd | ||
PIDFILE=/var/run/$NAME.pid | ||
STATUSFILE=/var/run/$NAME.status | ||
SCRIPTNAME=/etc/init.d/$NAME | ||
|
||
|
||
# Do not touch you can configure this in /etc/default/perccli-statusd | ||
MAILTO=root # Where to report problems | ||
PERIOD=600 # Seconds between each check (default 10 minutes) | ||
REMIND=7200 # Seconds between each reminder (default 2 hours) | ||
RUN_DAEMON=yes | ||
|
||
[ -e /etc/default/perccli-statusd ] && . /etc/default/perccli-statusd | ||
|
||
# Gracefully exit if the package has been removed. | ||
test -x /usr/sbin/perccli-status || exit 0 | ||
|
||
. /lib/lsb/init-functions | ||
[ -e /etc/default/rcS ] && . /etc/default/rcS | ||
|
||
if [ $RUN_DAEMON = "no" ] ; then | ||
log_begin_msg "perccli-statusd is disabled in /etc/default/perccli-statusd, not starting." | ||
log_end_msg 0 | ||
exit 0 | ||
fi | ||
|
||
check_perccli() { | ||
echo $$ > $PIDFILE.new && mv $PIDFILE.new $PIDFILE | ||
while true ; do | ||
# Check ever $PERIOD seconds, send email on every status | ||
# change and repeat ever $REMIND seconds if the raid is still | ||
# bad. | ||
if (perccli-status); then | ||
BADRAID=false | ||
else | ||
BADRAID=true | ||
logger -t perccli-statusd "detected non-optimal RAID status" | ||
fi | ||
STATUSCHANGE=false | ||
if [ true = "$BADRAID" ] ; then | ||
# RAID not OK | ||
(perccli-status) > $STATUSFILE.new | ||
if [ ! -f $STATUSFILE ] ; then # RAID just became broken | ||
STATUSCHANGE=true | ||
mv $STATUSFILE.new $STATUSFILE | ||
elif cmp -s $STATUSFILE $STATUSFILE.new ; then | ||
# No change. Should we send reminder? | ||
LASTTIME="`stat -c '%Z' $STATUSFILE`" | ||
NOW="`date +%s`" | ||
SINCELAST="`expr $NOW - $LASTTIME`" | ||
if [ $REMIND -le "$SINCELAST" ]; then | ||
# Time to send reminder | ||
STATUSCHANGE=true | ||
mv $STATUSFILE.new $STATUSFILE | ||
else | ||
rm $STATUSFILE.new | ||
fi | ||
else | ||
STATUSCHANGE=true | ||
mv $STATUSFILE.new $STATUSFILE | ||
fi | ||
else | ||
# RAID OK | ||
if [ -f $STATUSFILE ] ; then | ||
rm $STATUSFILE | ||
STATUSCHANGE=true | ||
fi | ||
fi | ||
|
||
if [ true = "$STATUSCHANGE" ]; then | ||
hostname="`uname -n`" | ||
( | ||
cat <<EOF | ||
This is a RAID status update from perccli-statusd. The perccli-status | ||
program reports that one of the RAIDs changed state: | ||
EOF | ||
if [ -f $STATUSFILE ] ; then | ||
cat $STATUSFILE | ||
else | ||
(perccli-status) | ||
fi | ||
echo | ||
echo "Report from $0 on $hostname" | ||
) | mail -s "info: MegaRAID raid status change on $hostname" $MAILTO | ||
fi | ||
sleep $PERIOD & | ||
# Kill sleep if we're signaled to exit, otherwise we will stay defunct | ||
# until sleep terminates. | ||
trap "kill $!; exit" TERM | ||
wait $! | ||
trap - TERM | ||
done | ||
} | ||
|
||
check_daemon() { | ||
# Let's check if there is a daemon which is really running and not timing out | ||
DAEMON_RUN=`ps aux | grep "/etc/init.d/perccli-statusd check_perccli" | grep -v grep | grep -v daemon` | ||
if [ -n "$DAEMON_RUN" ] ; then | ||
return 1; | ||
else | ||
return 0; | ||
fi | ||
} | ||
|
||
# | ||
# Function that starts the daemon/service. | ||
# | ||
d_start() { | ||
[ -f $PIDFILE ] && PID="`cat $PIDFILE`" | ||
if [ "$PID" ] ; then | ||
log_progress_msg "Daemon already running. Refusing to start another" | ||
return 0 | ||
elif check_daemon ; then | ||
# Use the daemon package to turn this script into a daemon | ||
start-stop-daemon --start --quiet --pidfile $PIDFILE \ | ||
--oknodo --exec /usr/bin/daemon /usr/bin/daemon $SCRIPTNAME check_perccli | ||
return 0 | ||
else | ||
log_progress_msg "Daemon is already running. Refusing to start another" | ||
return 0 | ||
fi | ||
} | ||
|
||
# | ||
# Function that stops the daemon/service. | ||
# | ||
d_stop() { | ||
if [ -f $PIDFILE ] ; then | ||
start-stop-daemon --stop --oknodo --quiet --pidfile $PIDFILE > /dev/null 2>&1 | ||
rm -f $PIDFILE | ||
else | ||
log_progress_msg "Daemon is already stopped." | ||
return 0 | ||
fi | ||
} | ||
|
||
# This is a workaround function which does not directly exit and | ||
# therefore can be used by a restart | ||
d_stop_by_restart() { | ||
if [ -f $PIDFILE ] ; then | ||
start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE | ||
rm -f $PIDFILE | ||
log_end_msg 0 | ||
else | ||
log_progress_msg "Daemon is already stopped." | ||
log_end_msg 0 | ||
fi | ||
} | ||
|
||
case "$1" in | ||
start) | ||
echo -n "" | ||
log_begin_msg "Starting $DESC: $NAME" | ||
d_start ; CODE=$? | ||
log_end_msg $CODE | ||
;; | ||
stop) | ||
log_begin_msg "Stopping $DESC: $NAME" | ||
d_stop ; CODE=$? | ||
log_end_msg $CODE | ||
;; | ||
check_perccli) | ||
check_perccli | ||
;; | ||
status) | ||
status_of_proc /usr/bin/daemon $NAME | ||
exit $? | ||
;; | ||
restart|force-reload) | ||
log_begin_msg "Restarting $DESC: $NAME" | ||
d_stop_by_restart | ||
sleep 1 | ||
d_start || CODE=$? | ||
log_end_msg $CODE | ||
;; | ||
*) | ||
# echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 | ||
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 | ||
exit 1 | ||
;; | ||
esac | ||
|
||
exit 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,10 @@ | ||
#!/usr/bin/make -f | ||
|
||
# See debhelper(7) (uncomment to enable). | ||
# Output every command that modifies files on the build system. | ||
export DH_VERBOSE = 1 | ||
|
||
|
||
# See FEATURE AREAS in dpkg-buildflags(1). | ||
export DEB_BUILD_MAINT_OPTIONS = hardening=+all | ||
|
||
|
||
%: | ||
dh $@ | ||
|
||
override_dh_installinit: | ||
dh_installinit --name=perccli-statusd |