Работает под debian.
# mkdir -p /opt/scripts/monitoring/active_alerts
Скрипт ложить в /opt/scripts/monitoring/checker.sh
#!/bin/bash SCRIPT_DIR=/opt/scripts/monitoring LOG_FILE=${SCRIPT_DIR}/status.log PHONES="80501234567 80507654321" CURDATE=`/bin/date +"%s"`; function alert { for i in $PHONES; do echo "$1 $2 $3" | /usr/sbin/sendmail -fmonitoring@monitoring ${i}@sms.mysmsgate.com; done } function check { cat $SCRIPT_DIR/targets | while read ip server; do /usr/bin/wget -T 5 --tries=3 -q -O - http://${ip}/.do_not_remove.php | grep SUCCESS >/dev/null; if [[ $? == 0 ]]; then if [[ -e $SCRIPT_DIR/active_alerts/$server ]]; then cat $SCRIPT_DIR/active_alerts/$server | while read startdate; do DATE=`/bin/date +"%F %T"`; let "i = $CURDATE - $startdate"; lenght=`/bin/date -u +"%T" --date=@${i}`; alert "$DATE" $server "is UP, downtime is $lenght"; echo "$DATE" $server "is UP, downtime is $lenght" > $LOG_FILE rm -f $SCRIPT_DIR/active_alerts/$server done fi else if [[ -e $SCRIPT_DIR/active_alerts/$server ]]; then MINUTE=`/bin/date +"%M"` if [[ $MINUTE == 00 ]]; then cat $SCRIPT_DIR/active_alerts/$server | while read startdate; do DATE=`/bin/date +"%F %T"`; let "i = $CURDATE - $startdate"; lenght=`/bin/date -u +"%T" --date=@${i}`; alert "$DATE" $server "down for $lenght"; done fi else echo $CURDATE > $SCRIPT_DIR/active_alerts/$server; DATE=`/bin/date +"%F %T"`; alert "$DATE" $server "is DOWN"; echo "$DATE" $server "is UP, downtime is $lenght" > $LOG_FILE fi fi done } check