#!/bin/bash #PATH=/sybase/${DB}/ASE-16_0/bin:/sybase/${DB}/ASE-16_0/install:/sybase/${DB}/WLA/bin::/sybase/${DB}/COCKPIT-4/bin:/sybase/${DB}/ASE-16_0/jobscheduler/bin:/sybase/${DB}/ASE-16_0/bin:/sybase/${DB}/ASE-16_0/install:/sybase/${DB}/OCS-16_0/bin:/usr/bin:/bin PATH=$PATH:/usr/bin # Ein paar Variablen definieren DB="" DBPASS="" EMAIL_SENDER="" EMAIL_EMPFAENGER="" ERRLOGFILE="sybsqlerr_$(date +%Y%m).log" ERRLOGPATH="/tmp" DATALOGPATH="/sybase/${DB}/.scripte/logs" DATALOGFILE="logmon_$(date +'%Y%m').log" # monatlihes Logfile erstellen logmon_202101.txt DBUSER="sapsa" DBPARAM="-X -w 1000" SQLQFILE="/sybase/${DB}/.scripte/syblogs.sql" declare -i PERCCRIT=90 #declare -i PERCFREE=0 ERROR=false #AWKPARAM="'{if(NR==22) print $0, " ", $3/$2*100,"%"}' >> "${DATALOGPATH}/${DATALOGFILE}"" # Logging # exec 3>&1 4>&2 # trap 'exec 2>&4 1>&3' 0 1 2 3 # exec 1>>"${LOGPATH}/${LOGFILE}.log" 2>&1 # Error Logs exec 2> "${ERRLOGPATH}/${ERRLOGFILE}" # Datenbankumgebung einlesen source /sybase/${DB}/SYBASE.sh if [[ ! -f "${DATALOGPATH}/${DATALOGFILE}" ]]; then # Beim ersten mal nur die Kopfzeilen erstellen /sybase/${DB}/OCS-16_0/bin/isql -S${DB} -U${DBUSER} -P${DBPASS} ${DBPARAM} -i /sybase/${DB}/.scripte/syblogs.sql \ | sed -E 's/^( total_size.*)/date\t\t\1\tpercentage free pages/g; s/^( -----------------)( ---------------){4}/\2\2 \2\2 \2\2 \2/g; s/([0-9]{4}.*)/\t\t \1/g' \ | head -n -2 \ >> "${DATALOGPATH}/${DATALOGFILE}" # Datensatz einfügen echo -n "$(date '+%F_%H%M')" >> "${DATALOGPATH}/${DATALOGFILE}" && \ /sybase/${DB}/OCS-16_0/bin/isql -S${DB} -U${DBUSER} -P${DBPASS} ${DBPARAM} -i /sybase/${DB}/.scripte/syblogs.sql | \ /bin/awk '{if(NR==22) printf "%s\t%.4f \%\n",$0,($3/$2*100);}' >> "${DATALOGPATH}/${DATALOGFILE}" else # Ein Einzeiler für die bessere Lesbarkeit auf mehrere Zeilen umgebrochen echo -n "$(date '+%F_%H%M')" >> "${DATALOGPATH}/${DATALOGFILE}" && \ /sybase/${DB}/OCS-16_0/bin/isql -S${DB} -U${DBUSER} -P${DBPASS} ${DBPARAM} -i /sybase/${DB}/.scripte/syblogs.sql | \ #/bin/awk ${AWKPARAM} /bin/awk '{if(NR==22) printf "\t%s\t%.4f \%\n",$0,($3/$2*100);}' >> "${DATALOGPATH}/${DATALOGFILE}" fi # Aktuellen freien Speicher in Variable sichern PERCFREE=$(tail -n 1 "${DATALOGPATH}/${DATALOGFILE}" | awk '{print $7}') echo ${PERCFREE} >> /tmp/sybtest.txt # Fehlerbehandlung wenn ein kritischer Wert überschritten wurde # floating is a mess mit der Bash. Wir verwenden daher bc if (( $(echo "${PERCFREE} >= ${PERCCRIT}" | bc) )); then echo "Kritischer Bereich ${CPERCRIT} nicht erreicht. ${PERCFREE} pages free." >> /tmp/sybtest.txt else cat <(printf "ACHTUNG!\nDer Logbereich der sybase Datenbank auf ${HOSTNAME} läuft in einen kritischen Bereich. Es sind nur noch ${PERCFREE} % pages des ${DB} Logbereiches frei. \ \n\n---------- Logdatei ${DATALOGPATH}/${DATALOGFILE} ----------\n") \ <(head -n 30 "${DATALOGPATH}/${DATALOGFILE}") <(printf "\n...\n\n") <(tail -n 24 "${DATALOGPATH}/${DATALOGFILE}") \ <(printf "\n\n\n---------- Logdatei /sybase/${DB}/ASE-16_0/install/${DB}.log ----------\n...\n") <(tail -n 30 "/sybase/${DB}/ASE-16_0/install/${DB}.log") \ <(printf "\n---------- Ende der Logdatei ----------\n\n\n-- \nMit freundlichen Grüßen\n\nDas SAP-Basis Team") \ | mailx -r ${EMAIL_SENDER} -s "Kritscher DB Zustand auf ${HOSTNAME}" ${EMAIL_EMPFAENGER} fi