#!/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 ;; *) echo "Usage: $0 [-h] [-w (default: $warning)] [-c (default: $critical) -F ]" exit 3 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="${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