dsa-check-file_age: support following symlinks and warning on empty files
[mirror/dsa-nagios.git] / dsa-nagios-checks / checks / dsa-check-file_age
index 546e5f2..6320d6f 100755 (executable)
@@ -2,6 +2,7 @@
 # vim: set fileencoding=utf-8 ai noet sts=8 sw=8 tw=0:
 #
 # Copyright © 2009 Stephen Gran <sgran@debian.org>
+# Copyright © 2017 Peter Palfrader
 #
 # Permission is hereby granted, free of charge, to any person obtaining
 # a copy of this software and associated documentation files (the
@@ -38,16 +39,23 @@ $0: usage:
 
        -h      This help message
        -i      Interval in minutes at which to alert
+       -z      Empty files are not OK
+       -L      Follow symlinks
        -f      File to check
 EOF
 
        exit $ret
 }
 
-while getopts f:i:h opt ; do
+ZEROFAIL=""
+FOLLOW=""
+
+while getopts f:i:hzL opt ; do
        case "$opt" in
                f) FILE="$OPTARG" ;;
                i) INTERVAL="$OPTARG" ;;
+               z) ZEROFAIL="1" ;;
+               L) FOLLOW="-L" ;;
                h) usage 0
        esac
 done
@@ -62,9 +70,14 @@ if [ ! -e "$FILE" ]; then
        exit 2
 fi
 
-if [ "$(( $( date +%s ) - $(stat -c %Y $FILE) ))" -gt "$(( $INTERVAL * 60 ))" ]; then
+if [ -n "$ZEROFAIL" ] && ! [ -s "$FILE" ]; then
+       printf "state file %s is empty\n" $FILE
+       exit 2
+fi
+
+if [ "$(( $( date +%s ) - $(stat $FOLLOW -c %Y $FILE) ))" -gt "$(( $INTERVAL * 60 ))" ]; then
        printf "state file %s is older than %d minutes\n" $FILE $INTERVAL
        exit 2
 fi
 
-printf "state file %s OK: updated on %s\n" $FILE "$(stat -c %y $FILE)"
+printf "state file %s OK: updated on %s\n" $FILE "$(stat $FOLLOW -c %y $FILE)"