#!/bin/bash
# skip crab_syntax

if [ "$1" = "stop" ]; then
	echo "Останавливаем на время обновления"
	rm -f /tmp/watchdog.lock
	rm -rf /tmp/watchdog*
	pids="$(pidof -x watchdog)"
	pids="${pids//$$/ }"
	if [ ! $pids ]; then
		echo "Уже остановлен"
		exit 0
	fi
	pkill -13 -P $pids
	pkill -13 -P $pids
	kill -13 $pids &>/dev/null
	kill -9 $pids &>/dev/null
	exit 0
fi

[ ! -f "/tmp/watchdog.lock" ] && echo "$$" > /tmp/watchdog.lock
exec 11> /tmp/watchdog.lock
[ ! -f /tmp/watchdog.lastrun ] && echo "$(date +%s)" > /tmp/watchdog.lastrun

if ! flock -x --nonblock 11 &>/dev/null; then
	echo "$(date +'%Y-%m-%d %H:%M:%S') [$$]: Обнаружен другой работающий watchdog см. /var/log/watchdog.log"
	echo "$(date +'%Y-%m-%d %H:%M:%S') [$$]: flock -x --nonblock 11"
	echo "ps1------------------------watchdog ps[$$]-------------------------------"
	ps aux | grep watchdog

	pstree -upal | grep -C 5 watchdog
	echo "ps2----------------------------------------------------------------------"
	cat /tmp/watchdog.err.*

	echo /usr/local/sbin/alarm "CRITICAL - Обнаружен другой работающий watchdog см. /var/log/watchdog.log"
	rm -f /tmp/watchdog.lock
	rm -rf /tmp/watchdog*
	pids="$(pidof -x watchdog)"
	pids="${pids//$$/ }"
	pkill -13 -P $pids
	pkill -13 -P $pids
	kill -13 $pids &>/dev/null
	kill -9 $pids &>/dev/null
	exit 255
fi
echo "$(date +%s)" > /tmp/watchdog.lastrun

echo "$(date +'%Y-%m-%d %H:%M:%S') [$$]: $HOSTNAME watchdog started"
echo "$(date +'%Y-%m-%d %H:%M:%S') [$$]: $HOSTNAME watchdog started" >/tmp/watchdog.err.$$

for angel_check in /usr/local/angel/check_*; do
	echo "Run check $angel_check"
	$angel_check &>>/tmp/watchdog.err.$$
done

echo
echo -------------------------------------------------------------
echo "$(date +'%Y-%m-%d %H:%M:%S') [$$]: $HOSTNAME watchdog catch Error"
cat /tmp/watchdog.err.$$
echo "$(date +'%Y-%m-%d %H:%M:%S') [$$]: $HOSTNAME watchdog end Error"
echo -------------------------------------------------------------
echo

rm -f /tmp/watchdog*.$$
rm -f /tmp/watchdog.lock
