Check FTP-Transfer

Dieses Script checkt die FTP-Transferlogs auf Fehler und meldet diese dann....aber Vorsicht, dies ist in KSH geschrieben ;-)

 

#!/usr/bin/ksh
#
# This script should chk the ftp-transfers for any errors
#
#  V 0.1  : stjakl : 22.07.08 : write the script
#  V 0.2  :
#  V 0.3  :
#


# define some var variables:
FILEPATH="/app/ftp/log"
LOGPATH2="/tmp"
LOGFILE="ftp_checker.$$.log"
LOGDIR="/tmp/ftp_check"
FILE_END_PATTERN="100|110|120|130|200"
FILE_BEGIN_PATTERN="^abc|^def|^ghi"
CHKPATTERN="error|panic|unsuccessful|abort|failure"
MAILTO="/usr/bin/mailx -s 'Job_Checker_Unsuccessfully' <YOUR_EMAIL>"
MAILTO_FINISH="/usr/bin/mailx -m -s 'Job_Checker_Finished' <YOUR_EMAIL<"
DATEGRP=`date +%y%m%d`
DATENOW=`/usr/bin/date`

# binaries-variables
FIND="/usr/bin/find"
GREP="/usr/bin/grep"
SED="/usr/bin/sed"
AWK="/usr/bin/awk"
ECHO="/usr/bin/echo"
CD="/usr/bin/cd"
LS="/usr/bin/ls"
MKDIR="/usr/bin/mkdir"
CAT="/usr/bin/cat"


# Here we go ...

# check if we got the logfolder
if [ ! -d ${LOGDIR} ] ; then
${MKDIR} -p ${LOGDIR}
fi
# Let's keep the logfolder small and do this quiet
${FIND} ${LOGDIR}/ -name "ftp*" -mtime 7 -exec rm {} \; > /dev/null 2>&1


# search for files
${FIND} ${FILEPATH} |${GREP} ${DATEGRP}

# if he found something which is ok, exitcode is = 0
if [ `${ECHO} $?` != 0 ] ; then
${ECHO} "KEINE LOGFILES VON HEUTE GEFUNDEN .... BITTE MANUELL UEBERPRUEFEN." | ${MAILTO}
fi

# build array
FILELIST=`${FIND} ${FILEPATH} |${GREP} ${DATEGRP}| ${GREP} -E -w ${FILE_END_PATTERN}`


# let's see if these files have something inside (not empty)
for i in ${FILELIST} ; do
if [ ! -s ${i} ] ; then
  ${ECHO} "EMPTY FILES ${i}" >>${LOGDIR}/${LOGFILE} && \
  ${ECHO} "EMPTY FILES ${i}"  | ${MAILTO}
else
  ${ECHO} "FOUND ${i} WITH DATA CONTENT"  >>${LOGDIR}/${LOGFILE}
fi
done

# Workarround for grep -A
#
# Check the transferoutput for code 150 and the following 226 (OK) --> send mail if NOK
for i in ${FILELIST} ; do
${ECHO} "CHECKING FOLLOWING FILE ${i} FOR 150 RETURNCODE" >> ${LOGDIR}/${LOGFILE} && \
for gaga in `${SED} -n '/^150/{p;n;p;n;}' $i | ${GREP} -v ^150 | ${AWK} '{print $1}'` ; do
  if [ ${gaga} != 226 ] ; then
   ${ECHO} "FOUND RETURNCODE WITH ERRORS IN ${i}" >> ${LOGDIR}/${LOGFILE} && \
   ${ECHO} "FTP-TRANSFERFEHLER IN FILE ${i} GEFUNDEN. BITTE PRUEFEN" | ${MAILTO}
  fi
done
done


# Check for more errorpattern
# grep returncode 1 if found nothing / returncode 0 if he found something which matches the pattern
for i in ${FILELIST} ; do
${ECHO} "CHECKING FOLLOWING FILE ${i} FOR ERRORS" >> ${LOGDIR}/${LOGFILE} && \
${GREP} -i -E ${CHKPATTERN} ${i}
  if [ `${ECHO} $?` = 0 ]; then
   ${ECHO} "FOUND ONE OF THE ${CHKPATTERN} ERRORS IN FILE ${i}" | ${MAILTO} && \
   ${ECHO} "FOUND ONE OF THE ${CHKPATTERN} ERRORS IN FILE ${i}" >>${LOGDIR}/${LOGFILE}
  fi
done
  
# OK, everything went well, let's send an email with the logfile
${CAT} -bt ${LOGDIR}/${LOGFILE}| ${MAILTO_FINISH}