Shell script designed to run every minute, simply checks if the uptime is less than it was when the script last ran. If it is less, it emails a bunch of stuff to the admin. Each time it runs it records the current uptime in a separate file.
Python version available here.
#!/usr/bin/env bash # # uptime-check.sh # Check uptime and mail if uptime is less than it was when script last ran # http://linux-101.org # HOSTNAME=$(hostname) HDRFROM="From: Uptime Script <devnull@example.com>" HDRTO="To: Sysadmin <alerts@example.com>" HDRSUBJ="Subject: $HOSTNAME has been rebooted" ENVELTO="alerts@example.com" #Match above HDRTO PWD=$(pwd) DATE=$(date '+%Y%m%d%H%M%S') DATAFILE=$PWD/uptime-check.data UPTIMENEW=$(gawk -F . '{ print $1 }' /proc/uptime) UPTIMEOLD=$(gawk -F : '{ print $2 }' $DATAFILE) if [ "$UPTIMENEW" -lt $UPTIMEOLD ] ; then TMPFILE=/var/tmp/uptime.tmp touch $TMPFILE echo $HDRFROM >> $TMPFILE echo $HDRTO >> $TMPFILE echo $HDRSUBJ >> $TMPFILE echo "uptime | ps aux | netstat -nap" >> $TMPFILE echo " " >> $TMPFILE $(uptime >> $TMPFILE) echo " " >> $TMPFILE $(ps aux >> $TMPFILE) echo " " >> $TMPFILE $(netstat -nap >> $TMPFILE) echo " " >> $TMPFILE echo "." >> $TMPFILE echo " " >> $TMPFILE cat $TMPFILE | sendmail "$ENVELTO" rm -f $TMPFILE echo "$DATE:$UPTIMENEW" > $DATAFILE else echo "$DATE:$UPTIMENEW" > $DATAFILE fi

