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