#!/bin/bash #(c) 2004 Meikel Bisping # Executes the given command in the given path and # logs to commandname.log # if anything looking like an error occurs a mail is sent if specified # if the variable $MASTERLOG is set, appends logging to that master log # the main script should set $MASTERLOG and write a first line into it # MASTERLOG="/home/superx/joolap/db/master.log";export MASTERLOG # echo "Start Test proc " > $MASTERLOG # Copyright 2004 by memtext.de # für komplexe Aufrufe kann man vorher eine CMD Variable erstellen # CMD="DOSQL $MODULE"_install_"$DATABASE_ABBR".sql # runAndCheck.x $MODULE_PATH "$CMD" EXIT_ON_ERROR NO_ERRORMAIL NO_LOGMAIL "$MODULE installieren" #Änderungen #28.5.2005 "FATAL" abfangen DQ #16.04.05 MAILPROG eingefügt. #21.07.04DQ Flag-überoprüfung bug $FLAG8 -eq 0 fehlte #19.7.04 MB prüfen, ob Path um . erweitert werden muss #13.7.04 MB statt mail -s Umgebungsvar MAILPROG (z.B. mail oder mutt) #08.7.04 MB bei Fehlern wird auch Stichwort error ausgegeben #28.4.04 MB Logdateien fangen mit L_ an #23.4.04 MB auch Permission denied abfangen function showUsage { echo "USAGE: runAndCheck.x path command (EXIT_ON_ERROR|CONT_ON_ERROR) (SEND_ERRORMAIL|NO_ERRORMAIL) (SEND_LOGMAIL|NO_LOGMAIL) [description] " echo "e.g. runAndCheck.x . test.x EXIT_ON_ERROR NO_ERRORMAIL NO_LOGMAIL ""runtest script"" " } CPATH=$1 CMD=$2 EXITWANTED=$3 ERRORMAILWANTED=$4 LOGMAILWANTED=$5 DESCRIPTION=$6 if [ "$MAILPROG" = "" ] then MAILPROG="mail" echo "In SQL_ENV bzw. JOOLAP_ENV muss ein Mailprog definiert werden, z.B: MAILPROG=mail oder MAILPROG=mutt export MAILPROG" fi; if [ "$CPATH" = "" -o "$CMD" = "" ] then showUsage exit 1 fi; if [ "$EXITWANTED" != "EXIT_ON_ERROR" -a "$EXITWANTED" != "CONT_ON_ERROR" ] then showUsage exit 1 fi; if [ "$ERRORMAILWANTED" != "SEND_ERRORMAIL" -a "$ERRORMAILWANTED" != "NO_ERRORMAIL" ] then showUsage exit 1 fi; if [ "$LOGMAILWANTED" != "SEND_LOGMAIL" -a "$LOGMAILWANTED" != "NO_LOGMAIL" ] then showUsage exit 1 fi; if [ "$DESCRIPTION" = "" ] then DESCRIPTION="aktion" fi #Prüfen ob der PATH erweitert werden muss case $PATH in .:*) ;; *:.) ;; *:.:*) ;; *) export PATH=.:$PATH ;; esac CURRPATH=`pwd` #Dateinamen für Log-Datei ohne Leerzeichen erstellen #echo $DESCRIPTION.log > replace.tmp LOG=$CPATH/L_` echo $DESCRIPTION.log | tr " " "_" ` #rm replace.tmp echo ""> $LOG #write to masterlog about starting first, necessary if one runAndCheck calls another if [ "$MASTERLOG" != "" ] then echo "--Start $DESCRIPTION am "`date +'%x %X'` >> $MASTERLOG fi #writing to log file echo "-- Start $DESCRIPTION am "`date +'%x %X'`>> $LOG #execute the command echo "Aktion $DESCRIPTION " cd $CPATH echo $CMD >> $LOG 2>&1 $CMD >> $LOG 2>&1 cd $CURRPATH echo "-- Ende $DESCRIPTION am "`date +'%x %X'` >> $LOG #update masterlog if [ ! "$MASTERLOG" = "" ] then #cat $LOG >> $MASTERLOG # log-datei ab Zeile 3 zu masterlog hinzufügen (--start Aktion und Zeit wurde vorher schon ins Masterlog geschrieben) sed -n -e '3,$p' $LOG>>$MASTERLOG fi #searching for errors fgrep -s "not found" $LOG FLAG1=$? fgrep -i -s "error" $LOG FLAG2=$? fgrep -i -s "nicht gefunden" $LOG FLAG3=$? fgrep -i -s "Exception" $LOG FLAG4=$? fgrep -i -s "Keine Berechtigung" $LOG FLAG5=$? fgrep -i -s "Permission denied" $LOG FLAG6=$? fgrep -i -s "Cannot open file" $LOG FLAG7=$? fgrep -i -s "cannot connect" $LOG FLAG8=$? fgrep -i -s "fatal" $LOG FLAG9=$? fgrep -i -s "fehler" $LOG FLAG10=$? fgrep -i -s "abnormal beendet" $LOG FLAG11=$? if [ $FLAG1 -eq 0 -o $FLAG2 -eq 0 -o $FLAG3 -eq 0 -o $FLAG4 -eq 0 -o $FLAG5 -eq 0 -o $FLAG6 -eq 0 -o $FLAG7 -eq 0 -o $FLAG8 -eq 0 -o $FLAG9 -eq 0 -o $FLAG10 -eq 0 -o $FLAG11 -eq 0 ] then echo "Es ist ein Fehler aufgetreten (error!)" echo "Pfad: $CPATH Befehl: $CMD Log-Datei: $LOG" if [ "$ERRORMAILWANTED" = "SEND_ERRORMAIL" -a "$ERRORMAIL" != "" ] then echo "sending errormail TO $ERRORMAIL" $MAILPROG -s "Fehler $DESCRIPTION" $ERRORMAIL <$LOG fi if [ "$EXITWANTED" = "EXIT_ON_ERROR" ] then #echo "Exiting..." exit 1 fi else echo " .. OK" echo "(Keine Probleme aufgefallen in $LOG)" echo if [ "$LOGMAILWANTED" = "SEND_LOGMAIL" -a "$LOGMAIL" != "" ] then echo "sending logmail to $LOGMAIL" $MAILPROG -s "$DESCRIPTION OK" $LOGMAIL <$LOG fi exit 0 fi