#!/bin/sh # checks for a +%Y-%m-%d %H:%M:%S-formated date in the last two lines of a file # default values: # 60s*60m*4h warning=14400 # 60s+60m*24h critical=86400 OPTIND=1 while getopts "hF:C:W:" opt; do case "$opt" in h) echo "Usage: $0 [-h] [-w (default: $warning)] [-c (default: $critical) -F ]" exit 3 ;; W) warning=$OPTARG ;; C) critical=$OPTARG ;; F) file=$OPTARG ;; esac done shift $((OPTIND-1)) [ "$1" = "--" ] && shift if [ -z ${file} ] then echo "ERROR: please provide filename to parse with $0 -F " exit 3 fi lastdate=$(tail -2 ${file} | grep -o -E '^[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2} [[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2}') lastts=$(date -d "${lastdate}" +%s) currentts=$(date +%s) if [ "x${lastts}" != "x" ] then delay=$(echo "${currentts}-${lastts}" | bc) else echo "UNKNOWN: date not found" exit 3 fi message=$(echo "${file} not updated since ${delay} seconds") if [ ${delay} -gt ${critical} ] then echo "CRITICAL: ${message}" exit 2 elif [ ${delay} -gt ${warning} ] then echo "WARNING: ${message}" exit 1 else echo "OK: ${message}" exit 0 fi