check file exist and age
Posted: Fri Feb 03, 2017 10:27 am
How to check if file exist if the folder name is chnaging every day. The check also needs ssh to logon.(username and password)
2017-02-01
2017-02-02
2017-02-01
2017-02-02
Support for Nagios products and services
https://support.nagios.com/forum/
Code: Select all
#!/bin/bash
function usage {
echo -en "$EMSG"
echo -e "Usage:\n">&2
echo -e "`basename $0` -u USERNAME -p PASSWORD -W WORKGROUP -s SMBSHARE -f FILEPATH -c FILEMAXTIME -w FILESIZEMIN [-d]\n">&2
exit 3
}
#Process command line parameters
OPTERR=1
while getopts ":u:p:W:s:f:c:w:d" FLAG;do
#echo "-$FLAG $OPTARG"
[[ $OPTARG == -* ]] && echo "Invalid option: -$OPTARG">&2 && usage;
case $FLAG in
u) USER=$OPTARG;;
p) PASS=$OPTARG;;
W) WORK=$OPTARG;;
s) SHER=$OPTARG;;
f) FILE=$OPTARG;;
c) FMXT=$OPTARG;;
w) FSZM=$OPTARG;;
d) DEBUG='true';;
:) echo "Option -$OPTARG requires an argument.">&2;usage;;
\?) echo "Invalid option: -$OPTARG">&2;usage;;
esac
done
#Ensure required parameters are present
EMSG="Y U No enter all data?!?\n"
[ "$*" ]&&[ "$USER" ]&&[ "$PASS" ]&&[ "$WORK" ]&&[ "$SHER" ]&&[ $FILE ]&&[ "$FMXT" ]&&[ $FSZM ]||usage
#Make a samba call
LISTING=`smbclient $SHER $PASS \
-U $USER -W $WORK 2> /dev/null<< _END_
dir $FILE
_END_`
TNOW=`date +%s`
CRIT="yes"
WARN="no"
NEWC=0
#Parse resluts
FILES=`echo -e "$LISTING" | awk '$0~/^ [^.]/&&$(NF-6)!="D"'`
FILEC=`echo "$FILES"|wc -l`
IFS=$'\n';for LINE in $FILES;do
FILE=`echo $LINE|awk '{print $1}'`
SIZE=`echo $LINE|awk '{print $(NF-5)}'`
TIME=$(date +%s -d "`echo $LINE|awk '{print $(NF-4),$(NF-3),$(NF-2),$(NF-1),$NF}'`")
TDIFs=$(($TNOW-$TIME))
TDIFm=$(($TDIFs/60))
[ -n "$DEBUG" ] && echo $FILE - ${SIZE} bytes, ${TDIFm} min >&2
[[ $TDIFm -lt $FMXT ]] && $((NEWC++)) && CRIT='no'
[[ $SIZE -lt $FSZM ]] && WARN='yes'
done
[ $CRIT = "yes" ] && echo "No files found newer than $FMXT minutes!" && exit 2
[ $WARN = "yes" ] && echo "Files are smaller then $FSZM bytes!" && exit 1
echo OK - Found $FILEC files above $FSZM bytes and $NEWC newer than $FMXT minutes.