summaryrefslogtreecommitdiffstats
path: root/system/smokeping/rc.smokeping-slave
diff options
context:
space:
mode:
Diffstat (limited to 'system/smokeping/rc.smokeping-slave')
-rwxr-xr-xsystem/smokeping/rc.smokeping-slave125
1 files changed, 125 insertions, 0 deletions
diff --git a/system/smokeping/rc.smokeping-slave b/system/smokeping/rc.smokeping-slave
new file mode 100755
index 0000000000..423bafc259
--- /dev/null
+++ b/system/smokeping/rc.smokeping-slave
@@ -0,0 +1,125 @@
+#!/usr/bin/env bash
+
+
+get_child_pids() {
+ if [[ -z "$1" ]]; then echo "get_child_pids:error: \$1 is empty " 1>&2 ; exit 1 ; fi
+ local parent_pid=$1
+ ps -o pid --no-headers --ppid $parent_pid
+}
+
+# Function to recursively get all descendant PIDs
+get_descendant_pids() {
+ if [[ -z "$1" ]]; then echo "get_descendant_pids:error: \$1 is empty " 1>&2 ; exit 1 ; fi
+ local parent_pid=$1
+ local child_pids=$(get_child_pids $parent_pid)
+ for pid in $child_pids; do
+ echo $pid
+ get_descendant_pids $pid
+ done
+}
+
+export LC_ALL=C
+function qnd_waitpid()
+(
+ while ps -p $1 &> /dev/null
+ do
+ sleep 5
+ done
+)
+cd /tmp
+
+source /etc/smokeping/slave_config.conf || { printf "/etc/smokeping/slave_config.conf not found\n" ; exit 1; }
+LOGFILE=${LOGFILE:-/var/log/smokeping-slave.log}
+CACHEDIR=${CACHEDIR:-/var/lib/smokeping/slave-cache}
+SLAVE_SECRET_PATH=${SLAVE_SECRET_PATH:-/etc/smokeping/slave_secret.conf}
+SMOKEPING_USER=${SMOKEPING_USER:-smokeping}
+if [[ "$MASTER_URL" == "" ]] ; then
+ printf "Set MASTER_URL= in /etc/smokeping/slave_config.conf\n"
+ exit 1
+fi
+if [[ ! -e "$SLAVE_SECRET_PATH" ]] ; then
+ printf "set SLAVE_SECRET_PATH in /etc/smokeping/slave_config.conf\n"
+fi
+chmod a-rwx "$SLAVE_SECRET_PATH"
+SMOKEPING_PIDFILE=/run/smokeping-slave.pid
+
+
+start()
+{
+ cd /var/lib/smokeping/
+
+ mkdir -p "$CACHEDIR"
+ chown $SMOKEPING_USER $CACHEDIR
+
+ touch "$LOGFILE"
+ chown $SMOKEPING_USER "$LOGFILE"
+
+ while true
+ do
+ /sbin/setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/sbin/fping
+ printf "\nStarting smokeping: %s\n" "$(date +'%Y-%m-%dT%H:%M:%S')" >> "$LOGFILE"
+ unset LC_ALL
+ unset LC_COLLATE
+ rm -rf "$CACHEDIR"/*.cache
+ printf '\nMONITOR:%s New process\n' $(date +'%Y-%m-%dT%H:%M:%S') >> $LOGFILE
+
+ /bin/su $SMOKEPING_USER -s/bin/bash -c "\
+ /usr/bin/smokeping \
+ --nodaemon \
+ --master-url=$MASTER_URL\
+ --cache-dir=$CACHEDIR \
+ --shared-secret=$SLAVE_SECRET_PATH \
+ --logfile=$LOGFILE &>> $LOGFILE"
+ sync
+ sleep 1
+# qnd_waitpid $(cat "$CACHEDIR"/smokeping.pid)
+ printf "MONITOR:Smokeping died: %s\n" "$(date +'%Y-%m-%dT%H:%M:%S')" | tee "$LOGFILE"
+ sleep 5
+ done & >/dev/null 2>&1
+ WRAPPER_PID=$!
+ echo "$WRAPPER_PID" > /run/smokeping-slave.pid
+}
+
+stop()
+{
+ printf "Killing smokeping slave.\n"
+
+ child_pids=$(get_descendant_pids $(cat "$SMOKEPING_PIDFILE"))
+
+ printf "PIDS=%s" "$(cat "$SMOKEPING_PIDFILE") $child_pids"
+ /bin/kill --timeout 3000 TERM --timeout 1000 KILL --signal QUIT $(cat "$SMOKEPING_PIDFILE") $child_pids
+
+}
+
+
+case "$1" in
+ start)
+ printf "case up\n"
+ start
+ exit "$?"
+ ;;
+ stop)
+ printf "case down\n"
+ stop
+ exit "$?"
+ ;;
+ status)
+ if [[ -e "$SMOKEPING_PIDFILE" && "" != $(cat "$SMOKEPING_PIDFILE") ]] ; then
+ pstree -s -p $(cat "$SMOKEPING_PIDFILE")
+ else
+ printf "smokeping slave is not running or not running from this service.\n"
+ fi
+ ;;
+ restart)
+ if ! stop
+ then
+ exit "$?"
+ fi
+ if ! start
+ then
+ exit "$?"
+ fi
+ ;;
+ *) printf "usage: {up,down,restart,status}\n"
+esac
+