diff --git a/env/BI_ENV.sam b/env/BI_ENV.sam index 7f78f27..a7a3a30 100644 --- a/env/BI_ENV.sam +++ b/env/BI_ENV.sam @@ -13,7 +13,6 @@ export PATH="$JAVA_HOME/bin:$PATH" # Java-Optionen export JAVA_OPTS="-Xmx1520M -Djava.awt.headless=true \ --DHIS1_DATABASES_PROPERTIES=/home/superx/git/Memtext-Interna/devel_module/kern/tomcat_superx_git/dq/his1_databases_eduetl_only.properties \ --add-opens java.naming/com.sun.jndi.ldap=ALL-UNNAMED \ --add-opens java.base/sun.nio.ch=ALL-UNNAMED \ --add-opens java.base/sun.net.www.protocol.jar=ALL-UNNAMED \ @@ -60,6 +59,12 @@ export LOGPFAD="$WEBAPP/WEB-INF/logs" # - Erfolgsfall → Mail an LOGMAIL (nur, wenn gesetzt) # - Fehlerfall → Mail an ERRORMAIL, falls vorhanden, sonst an LOGMAIL +# Steuerung für Log-Anhänge in Mails: +# error = Logdateien nur im Fehlerfall anhängen +# always = Logdateien immer anhängen (Erfolg + Fehler) +export MAIL_ATTACH_LOGS_MODE="error" +# export MAIL_ATTACH_LOGS_MODE="always" + # Mailprogramm (s-nail mit vorkonfiguriertem Account 'superx_mailversand') export MAILPROG='s-nail --account=superx_mailversand -S ttycharset=utf-8 -S sendcharset=utf-8' diff --git a/update/hisinone_bi_qisserver/modules_update.sh b/update/hisinone_bi_qisserver/modules_update.sh index 81b2d11..e1808fe 100755 --- a/update/hisinone_bi_qisserver/modules_update.sh +++ b/update/hisinone_bi_qisserver/modules_update.sh @@ -4,11 +4,11 @@ # # Führt BI-Updatejobs für alle in BI_UPDATE_MODULES definierten Module aus. # Erwartet, dass vorher BI_ENV gesourced wurde (JAVA_HOME, WEBAPP, LOGPFAD, -# BI_UPDATE_MODULES, MAILPROG, LOGMAIL, ERRORMAIL, MAIL_BETREFF_*, -# sowie die Mapping-Tabelle SYSTEMINFO_MAP in der BI_ENV). +# BI_UPDATE_MODULES, MAILPROG, LOGMAIL, ERRORMAIL, MAIL_BETREFF_*). # -# Die wichtigsten Variablen werden im Startcheck geprüft. Fehlt etwas, -# wird – sofern konfiguriert – eine Fehlermail verschickt und das Skript beendet. +# Dieses Skript protokolliert die Läufe zusätzlich in der Tabelle update_prot +# (über DOQUERY, falls im PATH verfügbar) und kann Logdateien optional per Mail +# anhängen – nur im Fehlerfall oder immer (gesteuert über MAIL_ATTACH_LOGS_MODE). set -u @@ -33,21 +33,32 @@ declare -A SYSTEMINFO_MAP=( [sva]=6 ) +# Steuerung, wann Logs angehängt werden: +# error = nur im Fehlerfall (Standard) +# always = bei Erfolg und Fehler +MAIL_ATTACH_LOGS_MODE="${MAIL_ATTACH_LOGS_MODE:-error}" + +# Steuerung, ob die Job-Logdatei auf interne Fehler geprüft werden soll. +# true = Log nach Fehlermustern durchsuchen (FAILED / Fehlgeschlagen etc.) +# false = nur Java-Exitcode verwenden +CHECK_JOBLOG_FOR_ERRORS="${CHECK_JOBLOG_FOR_ERRORS:-false}" ########## Hilfsfunktionen für Mailversand ########## -# Log-Mail (Erfolgsfall) – nur, wenn MAILPROG und LOGMAIL gesetzt sind +# Log-Mail (Erfolgsfall) – nur, wenn MAILPROG und LOGMAIL gesetzt sind. +# Zusätzliche Parameter ab $3 werden direkt an MAILPROG weitergereicht (z.B. -a ). send_log_mail() { local subject="$1" local body_file="$2" + shift 2 if [ -n "${MAILPROG:-}" ] && [ -n "${LOGMAIL:-}" ]; then - $MAILPROG -s "$subject" "$LOGMAIL" <"$body_file" + $MAILPROG -s "$subject" "$@" "$LOGMAIL" <"$body_file" fi } -# Fehlermail – bevorzugt an ERRORMAIL, sonst an LOGMAIL -# Zusätzliche Parameter (ab $3) werden direkt an MAILPROG weitergereicht (z.B. -a ) +# Fehlermail – bevorzugt an ERRORMAIL, sonst an LOGMAIL. +# Zusätzliche Parameter ab $3 werden direkt an MAILPROG weitergereicht (z.B. -a ). send_error_mail() { local subject="$1" local body_file="$2" @@ -72,8 +83,10 @@ startcheck_var() { local value="${!varname:-}" if [ -z "$value" ]; then - # Startcheck-Fehler in temporärer Logdatei protokollieren - local tmpfile="/tmp/bi_update_startcheck_${varname}.log" + # Fallback auf /tmp, falls LOGPFAD (noch) nicht gesetzt ist + local logdir="${LOGPFAD:-/tmp}" + local tmpfile="$logdir/bi_update_startcheck_${varname}.log" + { echo "Startcheck: Variable $varname fehlt oder ist leer. (Quelle: BI_ENV)" echo "Hinweis: Der Wert wird normalerweise in der BI_ENV gepflegt." @@ -114,7 +127,8 @@ MASTERLOG="$LOGPFAD/bi_update.log" mkdir -p "$LOGPFAD" ERROR_FLAG=0 -ERROR_LOG_FILES=() # Liste der Modul-Logfiles mit Fehlern +ERROR_LOG_FILES=() # Modul-/Job-Logs für Fehler-Mails +SUCCESS_LOG_FILES=() # Modul-/Job-Logs für Erfolgs-Mails (bei MAIL_ATTACH_LOGS_MODE=always) ########## Funktion: Modul-Update ausführen ########## @@ -127,6 +141,9 @@ run_module_update() { module_upper=$(echo "$module" | tr '[:lower:]' '[:upper:]') local joblog="$log_dir/${module}_update.log" + # Modul-Log immer in SUCCESS_LOG_FILES merken (für mögliche Erfolgs-Anhänge) + SUCCESS_LOG_FILES+=("$joblog") + local start_ts local end_ts start_ts=$(date '+%Y-%m-%d %H:%M:%S%z') @@ -141,7 +158,6 @@ run_module_update() { if [ $DOQUERY_AVAILABLE -eq 1 ]; then # Standardwert 0, falls Mapping nicht vorhanden ist local sys_id="0" - # Prüfen, ob SYSTEMINFO_MAP existiert (kommt aus BI_ENV) if declare -p SYSTEMINFO_MAP >/dev/null 2>&1; then sys_id="${SYSTEMINFO_MAP[$module]:-0}" fi @@ -163,6 +179,18 @@ run_module_update() { rc=$? fi + # Optional: Logdatei inhaltlich auf Fehler prüfen, + # falls der Prozess selbst mit Exitcode 0 beendet wurde. + if [ "$rc" -eq 0 ] && [ "$CHECK_JOBLOG_FOR_ERRORS" = "true" ]; then + if grep -q "Beim Ausführen des Jobs sind Fehler aufgetreten" "$joblog" \ + || grep -q " status: \[FAILED\]" "$joblog" \ + || grep -q "^\\*\\* Fehlgeschlagen:" "$joblog" + then + echo "Hinweis: Modul $module meldet interne Fehler im Job-Log – Returncode wird auf 1 gesetzt." >>"$masterlog" + rc=1 + fi + fi + end_ts=$(date '+%Y-%m-%d %H:%M:%S%z') { @@ -191,12 +219,38 @@ run_module_update() { fi ########## DB-Protokollierung: Erfolg ENDE ########## + ########## Zusätzliche Job-Logdatei auch im Erfolgsfall registrieren ########## + # Damit sie bei MAIL_ATTACH_LOGS_MODE=always als Anhang mitgeschickt werden kann. + local jobs_dir="$WEBAPP/WEB-INF/logs/jobs" + if [ -d "$jobs_dir" ]; then + # neueste Datei, die mit dem Modulnamen in Großbuchstaben beginnt, z.B. KENN_*.log + local newest_jobfile + newest_jobfile=$(ls -1t "$jobs_dir/${module_upper}_"*.log 2>/dev/null | head -n1 || true) + if [ -n "$newest_jobfile" ] && [ -f "$newest_jobfile" ]; then + SUCCESS_LOG_FILES+=("$newest_jobfile") + echo "Hinweis: Zusätzlicher Job-Log (Erfolg) für Modul $module registriert: $newest_jobfile" >>"$masterlog" + fi + fi + ########## Ende: zusätzliche Job-Logdatei (Erfolg) ########## + else echo ">>>> ACHTUNG: Update des Moduls $module wurde mit einem FEHLER beendet! <<<<" >>"$masterlog" echo "--- Ende Update von $module: FEHLER ---" >>"$masterlog" ERROR_FLAG=1 ERROR_LOG_FILES+=("$joblog") + ########## Zusätzliche Job-Logdatei aus $WEBAPP/WEB-INF/logs/jobs im Fehlerfall ########## + local jobs_dir="$WEBAPP/WEB-INF/logs/jobs" + if [ -d "$jobs_dir" ]; then + local newest_jobfile + newest_jobfile=$(ls -1t "$jobs_dir/${module_upper}_"*.log 2>/dev/null | head -n1 || true) + if [ -n "$newest_jobfile" ] && [ -f "$newest_jobfile" ]; then + ERROR_LOG_FILES+=("$newest_jobfile") + echo "Hinweis: Zusätzlicher Job-Log (Fehler) für Modul $module angehängt: $newest_jobfile" >>"$masterlog" + fi + fi + ########## Ende: zusätzliche Job-Logdatei (Fehler) ########## + ########## DB-Protokollierung: Fehler ########## if [ $DOQUERY_AVAILABLE -eq 1 ]; then $DOQUERY_CMD " @@ -242,14 +296,22 @@ done ########## Mailversand (optional) ########## if [ "$ERROR_FLAG" -eq 0 ]; then - # Erfolgreich → Log-Mail an LOGMAIL (falls konfiguriert) + # Erfolgsfall + attach_args=() + if [ "$MAIL_ATTACH_LOGS_MODE" = "always" ]; then + for f in "${SUCCESS_LOG_FILES[@]}"; do + [ -f "$f" ] && attach_args+=("-a" "$f") + done + fi + send_log_mail \ "${MAIL_BETREFF_UPDATE:-BI Job Update}${MAIL_BETREFF_SUFFIX_ERFOLGREICH:-}" \ - "$MASTERLOG" + "$MASTERLOG" \ + "${attach_args[@]}" + else echo "Sende Fehler-Logmail (falls konfiguriert)." - # Attachments für fehlerhafte Modul-Logs vorbereiten (s-nail: -a DATEI) attach_args=() for f in "${ERROR_LOG_FILES[@]}"; do [ -f "$f" ] && attach_args+=("-a" "$f") diff --git a/upgrade/hisinone_bi_qisserver/modules_upgrade.sh b/upgrade/hisinone_bi_qisserver/modules_upgrade.sh index 6c0c8cd..0d192eb 100755 --- a/upgrade/hisinone_bi_qisserver/modules_upgrade.sh +++ b/upgrade/hisinone_bi_qisserver/modules_upgrade.sh @@ -1,96 +1,328 @@ #!/bin/bash +# +# modules_upgrade.sh +# +# Führt BI-Upgrades für alle in BI_UPGRADE_MODULES definierten Module aus. +# Erwartet, dass vorher BI_ENV gesourced wurde (JAVA_HOME, WEBAPP, LOGPFAD, +# BI_UPGRADE_MODULES, MAILPROG, LOGMAIL, ERRORMAIL, MAIL_BETREFF_*). +# +# Dieses Skript protokolliert die Läufe zusätzlich in der Tabelle update_prot +# (über DOQUERY, falls im PATH verfügbar) und kann Logdateien optional per Mail +# anhängen – nur im Fehlerfall oder immer (gesteuert über MAIL_ATTACH_LOGS_MODE). -#BI Upgrade Script (Muster, siehe ../../env/BI_ENV.sam) -#Benutzte Variablen: -#WEBAPP=/var/lib/tomcat9/webapps/superx -#Module Liste: -#Hier werden die zu verwendende Module aufgelistet. -#Nur den Modulnamen in Kleinbuchstaben -#export BI_UPGRADE_MODULES="kern cob sos sva kenn" -#LOGPFAD=/var/log/tomcat9 -#Mailprogramm: -#export MAILPROG=s-nail +# BI_ENV einbinden (Pfad ggf. anpassen) +. /var/lib/tomcat10/webapps/superx/WEB-INF/bin/BI-Maintenance/env/BI_ENV +set -u -#Beispielaufruf: -#export BI_UPGRADE_MODULES="erfolg kenn" -#modules_upgrade.sh -#in crontab: -# Werktäglicher BI-Upgrade um 18 Uhr -#0 18 * * 1-5 /var/lib/tomcat9/BI_Maintenance/upgrade/hisinone_bi_qisserver/modules_upgrade.sh >/var/lib/tomcat9/BI_Maintenance/upgrade/hisinone_bi_qisserver/modules_upgrade.log 2>&1 +####################################### +# Modul → systeminfo_id Mapping +####################################### +declare -A SYSTEMINFO_MAP=( + [gang]=121 + [cob]=10 + [zul]=130 + [man]=200 + [sos]=7 + [erfolg]=120 + [rpta]=330 + [etl]=270 + [kern]=9 + [kenn]=109 + [ivs]=140 + [bau]=4 + [fin]=3 + [lm]=300 + [sva]=6 +) -# -#Variablen und Umgebung setzen: +# Steuerung, wann Logs angehängt werden: +# error = nur im Fehlerfall (Standard) +# always = bei Erfolg und Fehler +MAIL_ATTACH_LOGS_MODE="${MAIL_ATTACH_LOGS_MODE:-error}" -MASTERLOG=$LOGPFAD/bi_upgrade.log +# Steuerung, ob die Job-Logdatei auf interne Fehler geprüft werden soll. +# true = Log nach Fehlermustern durchsuchen (FAILED / Fehlgeschlagen etc.) +# false = nur Java-Exitcode verwenden +CHECK_JOBLOG_FOR_ERRORS="${CHECK_JOBLOG_FOR_ERRORS:-false}" -#erzeuge Logs Verzeichnis wenn es noch nicht existiert: -mkdir -p $LOGPFAD +########## Hilfsfunktionen für Mailversand ########## -ERROR_FLAG=0 -ERROR_LOG="" +# Log-Mail (Erfolgsfall) – nur, wenn MAILPROG und LOGMAIL gesetzt sind. +# Zusätzliche Parameter ab $3 werden direkt an MAILPROG weitergereicht (z.B. -a ). +send_log_mail() { + local subject="$1" + local body_file="$2" + shift 2 + if [ -n "${MAILPROG:-}" ] && [ -n "${LOGMAIL:-}" ]; then + $MAILPROG -s "$subject" "$@" "$LOGMAIL" <"$body_file" + fi +} +# Fehlermail – bevorzugt an ERRORMAIL, sonst an LOGMAIL. +# Zusätzliche Parameter ab $3 werden direkt an MAILPROG weitergereicht (z.B. -a ). +send_error_mail() { + local subject="$1" + local body_file="$2" + shift 2 -# + local recipient="" + if [ -n "${ERRORMAIL:-}" ]; then + recipient="$ERRORMAIL" + elif [ -n "${LOGMAIL:-}" ]; then + recipient="$LOGMAIL" + fi + if [ -n "${MAILPROG:-}" ] && [ -n "$recipient" ]; then + $MAILPROG -s "$subject" "$@" "$recipient" <"$body_file" + fi +} -executeUpgrade() -{ - MODUL=$1 - LOGPFAD=$2 - MYMASTERLOG=$3 - MODUL_UPPER=`echo $MODUL | tr [a-z] [A-Z]` - MODULLOG=$LOGPFAD/"$MODUL_UPPER"_upgrade.log - echo "--- Start Upgrade für: $MODUL_UPPER ---" >>$MYMASTERLOG - date >>$MYMASTERLOG - echo Executing java -Xmx${MEM} -cp "...QIS_CLASSPATH" -Dfile.encoding=UTF-8 de.his.edustore.modules.WebFrontendForModuleInstall $MODUL upgrade '$SUPERX_DIR='$WEBAPP'/WEB-INF/conf/edustore $'$MODUL_UPPER'_PFAD='$WEBAPP'/WEB-INF/conf/edustore/db/module/'$MODUL >>$MODULLOG 2>&1 - java -Xmx${MEM} -cp "$QIS_CLASSPATH" -Dfile.encoding=UTF-8 de.his.edustore.modules.WebFrontendForModuleInstall $MODUL upgrade '$SUPERX_DIR='$WEBAPP'/WEB-INF/conf/edustore $'$MODUL_UPPER'_PFAD='$WEBAPP'/WEB-INF/conf/edustore/db/module/'$MODUL >>$MODULLOG 2>&1 - - - - RETURN_CODE=$? - echo "Returncode von dem Job des Moduls $MODUL_UPPER ist: $RETURN_CODE" >>$MYMASTERLOG - date >>$MYMASTERLOG - if [ $RETURN_CODE -eq 0 ] -then - echo "--- Ende Upgrade von $MODUL_UPPER: erfolgreich ---" >>$MYMASTERLOG +########## Startcheck – minimale Grundprüfung ########## + +startcheck_var() { + local varname="$1" + local value="${!varname:-}" + + if [ -z "$value" ]; then + # Fallback auf /tmp, falls LOGPFAD (noch) nicht gesetzt ist + local logdir="${LOGPFAD:-/tmp}" + local tmpfile="$logdir/bi_upgrade_startcheck_${varname}.log" + + { + echo "Startcheck: Variable $varname fehlt oder ist leer. (Quelle: BI_ENV)" + echo "Hinweis: Der Wert wird normalerweise in der BI_ENV gepflegt." + date + } >"$tmpfile" + + # Fehlermail (optional) schicken + send_error_mail "BI Upgrade Startcheck Fehler: $varname fehlt" "$tmpfile" + + echo "FEHLER: Startcheck gescheitert – Variable $varname fehlt oder ist leer." + echo "Hinweis: Der Wert wird normalerweise in der BI_ENV gepflegt." + exit 1 + fi +} + +# Startcheck: Pflichtvariablen aus BI_ENV +startcheck_var "WEBAPP" +startcheck_var "LOGPFAD" +startcheck_var "BI_UPGRADE_MODULES" + +########## DOQUERY prüfen (über $PATH) ########## +# DOQUERY wird nur verwendet, wenn es im PATH gefunden wird. +# Ist es nicht vorhanden, wird die DB-Protokollierung vollständig übersprungen. + +DOQUERY_AVAILABLE=0 +DOQUERY_CMD="" + +if command -v DOQUERY >/dev/null 2>&1; then + DOQUERY_AVAILABLE=1 + DOQUERY_CMD="DOQUERY" else - echo ">>>> Achtung: Das Update des Modules $MODUL_UPPER wurde mit einem Fehler beendet! <<<<" >> $MYMASTERLOG - echo "--- Ende des Upgrades vom Modul $MODUL_UPPER mit Fehler ---" >>$MYMASTERLOG - ERROR_FLAG=1 + echo "Hinweis: DOQUERY nicht im PATH gefunden – DB-Protokollierung deaktiviert." fi - ERROR_LOG+=" $MAIL_APPEND $JOBLOG" - echo "" >>$MYMASTERLOG + +########## Logging vorbereiten ########## + +MASTERLOG="$LOGPFAD/bi_upgrade.log" +mkdir -p "$LOGPFAD" + +ERROR_FLAG=0 +ERROR_LOG_FILES=() # Modul-/Job-Logs für Fehler-Mails +SUCCESS_LOG_FILES=() # Modul-/Job-Logs für Erfolgs-Mails (bei MAIL_ATTACH_LOGS_MODE=always) + +########## Funktion: Modul-Upgrade ausführen ########## + +run_module_upgrade() { + local module="$1" + local log_dir="$2" + local masterlog="$3" + + local module_upper + module_upper=$(echo "$module" | tr '[:lower:]' '[:upper:]') + local joblog="$log_dir/${module}_upgrade.log" + + # Modul-Log immer in SUCCESS_LOG_FILES merken (für mögliche Erfolgs-Anhänge) + SUCCESS_LOG_FILES+=("$joblog") + + local start_ts + local end_ts + start_ts=$(date '+%Y-%m-%d %H:%M:%S%z') + + { + echo + echo "--- Start Upgrade für Modul: $module ($module_upper) ---" + date + } >>"$masterlog" + + ########## DB-Protokollierung: Start ########## + if [ $DOQUERY_AVAILABLE -eq 1 ]; then + # Standardwert 0, falls Mapping nicht vorhanden ist + local sys_id="0" + if declare -p SYSTEMINFO_MAP >/dev/null 2>&1; then + sys_id="${SYSTEMINFO_MAP[$module]:-0}" + fi + + $DOQUERY_CMD " + INSERT INTO update_prot (systeminfo_id, update_entity, update_id, update_time) + VALUES ($sys_id, '$module', -20000, '$start_ts'); + " >>"$masterlog" 2>&1 || echo "WARNUNG: DB-Insert für Modul $module (Upgrade) fehlgeschlagen." >>"$masterlog" + fi + ########## DB-Protokollierung: Start ENDE ########## + + # Java-Job für Upgrade ausführen, Fehler kontrolliert auswerten + local rc=0 + if ! java ${JAVA_OPTS:-} \ + -classpath "$WEBAPP/WEB-INF/classes:$WEBAPP/WEB-INF/lib/*:$WEBAPP/WEB-INF/lib_ext/*" \ + de.superx.bin.ComponentAdminCLI -u "$module" \ + >>"$joblog" 2>&1 + then + rc=$? + fi + + # Optional: Logdatei inhaltlich auf Fehler prüfen, + # falls der Prozess selbst mit Exitcode 0 beendet wurde. + if [ "$rc" -eq 0 ] && [ "$CHECK_JOBLOG_FOR_ERRORS" = "true" ]; then + if grep -q "Beim Ausführen des Jobs sind Fehler aufgetreten" "$joblog" \ + || grep -q " status: \[FAILED\]" "$joblog" \ + || grep -q "^\\*\\* Fehlgeschlagen:" "$joblog" + then + echo "Hinweis: Modul $module meldet interne Fehler im Job-Log – Returncode wird auf 1 gesetzt." >>"$masterlog" + rc=1 + fi + fi + + end_ts=$(date '+%Y-%m-%d %H:%M:%S%z') + + { + echo "Returncode des Upgrade-Moduls $module: $rc" + date + } >>"$masterlog" + + if [ "$rc" -eq 0 ]; then + echo "--- Ende Upgrade von $module: ERFOLGREICH ---" >>"$masterlog" + + ########## DB-Protokollierung: Erfolg ########## + if [ $DOQUERY_AVAILABLE -eq 1 ]; then + $DOQUERY_CMD " + UPDATE update_prot + SET updated_at = '$end_ts', + update_id = -20000 + WHERE tid = ( + SELECT tid + FROM update_prot + WHERE update_entity = '$module' + AND updated_at IS NULL + ORDER BY tid DESC + LIMIT 1 + ); + " >>"$masterlog" 2>&1 || echo "WARNUNG: DB-Update (Erfolg, Upgrade) für Modul $module fehlgeschlagen." >>"$masterlog" + fi + ########## DB-Protokollierung: Erfolg ENDE ########## + + ########## Zusätzliche Job-Logdatei auch im Erfolgsfall registrieren ########## + # Damit sie bei MAIL_ATTACH_LOGS_MODE=always als Anhang mitgeschickt werden kann. + local jobs_dir="$WEBAPP/WEB-INF/logs/jobs" + if [ -d "$jobs_dir" ]; then + # neueste Datei, die mit dem Modulnamen in Großbuchstaben beginnt, z.B. KENN_*.log + local newest_jobfile + newest_jobfile=$(ls -1t "$jobs_dir/${module_upper}_"*.log 2>/dev/null | head -n1 || true) + if [ -n "$newest_jobfile" ] && [ -f "$newest_jobfile" ]; then + SUCCESS_LOG_FILES+=("$newest_jobfile") + echo "Hinweis: Zusätzlicher Job-Log (Erfolg, Upgrade) für Modul $module registriert: $newest_jobfile" >>"$masterlog" + fi + fi + ########## Ende: zusätzliche Job-Logdatei (Erfolg) ########## + + else + echo ">>>> ACHTUNG: Upgrade des Moduls $module wurde mit einem FEHLER beendet! <<<<" >>"$masterlog" + echo "--- Ende Upgrade von $module: FEHLER ---" >>"$masterlog" + ERROR_FLAG=1 + ERROR_LOG_FILES+=("$joblog") + + ########## Zusätzliche Job-Logdatei aus $WEBAPP/WEB-INF/logs/jobs im Fehlerfall ########## + local jobs_dir="$WEBAPP/WEB-INF/logs/jobs" + if [ -d "$jobs_dir" ]; then + local newest_jobfile + newest_jobfile=$(ls -1t "$jobs_dir/${module_upper}_"*.log 2>/dev/null | head -n1 || true) + if [ -n "$newest_jobfile" ] && [ -f "$newest_jobfile" ]; then + ERROR_LOG_FILES+=("$newest_jobfile") + echo "Hinweis: Zusätzlicher Job-Log (Fehler, Upgrade) für Modul $module angehängt: $newest_jobfile" >>"$masterlog" + fi + fi + ########## Ende: zusätzliche Job-Logdatei (Fehler) ########## + + ########## DB-Protokollierung: Fehler ########## + if [ $DOQUERY_AVAILABLE -eq 1 ]; then + $DOQUERY_CMD " + UPDATE update_prot + SET updated_at = '$end_ts', + update_id = -20001 + WHERE tid = ( + SELECT tid + FROM update_prot + WHERE update_entity = '$module' + AND updated_at IS NULL + ORDER BY tid DESC + LIMIT 1 + ); + " >>"$masterlog" 2>&1 || echo "WARNUNG: DB-Update (Fehler, Upgrade) für Modul $module fehlgeschlagen." >>"$masterlog" + fi + ########## DB-Protokollierung: Fehler ENDE ########## + fi + + echo >>"$masterlog" } -#Upgrades: +########## Schleife über alle Module ########## + +{ + echo "Starte BI-Upgrades für folgende Module: $BI_UPGRADE_MODULES" + date + echo "######################################" + echo +} >"$MASTERLOG" -echo "Starte BI-Upgrades für die Module: $BI_UPGRADE_MODULES" >$MASTERLOG -date >>$MASTERLOG -echo -e "######################################\n\n" >>$MASTERLOG -for MODULE_SINGLE in ${BI_UPGRADE_MODULES[@]} ; do -executeUpgrade $MODULE_SINGLE $LOGPFAD $MASTERLOG +for module in $BI_UPGRADE_MODULES; do + run_module_upgrade "$module" "$LOGPFAD" "$MASTERLOG" done -echo -e "\n\n######################################" >>$MASTERLOG -echo -e "-- Ende BI upgrade `date`\n\n" >>$MASTERLOG +{ + echo + echo "######################################" + echo "-- Ende BI Upgrade $(date)" + echo +} >>"$MASTERLOG" + +########## Mailversand (optional) ########## +if [ "$ERROR_FLAG" -eq 0 ]; then + # Erfolgsfall + attach_args=() + if [ "$MAIL_ATTACH_LOGS_MODE" = "always" ]; then + for f in "${SUCCESS_LOG_FILES[@]}"; do + [ -f "$f" ] && attach_args+=("-a" "$f") + done + fi + + send_log_mail \ + "${MAIL_BETREFF_UPGRADE:-BI Job Upgrade}${MAIL_BETREFF_SUFFIX_ERFOLGREICH:-}" \ + "$MASTERLOG" \ + "${attach_args[@]}" -# Mailversand -if [ $ERROR_FLAG -eq 0 ] -then - if [ "$MAILPROG" != "" ] - then - $MAILPROG -s "$MAIL_BETREFF_UPGRADE$MAIL_BETREFF_SUFFIX_ERFOLGREICH" $LOGMAIL <$MYMASTERLOG - fi - else - if [ "$MAILPROG" != "" ] - then - echo "Sende Logmail an $LOGMAIL" - $MAILPROG -s "$MAIL_BETREFF_UPGRADE$MAIL_BETREFF_SUFFIX_FEHLER" $ERROR_LOG $LOGMAIL <$MYMASTERLOG - fi + echo "Sende Fehler-Logmail (Upgrade, falls konfiguriert)." -fi + attach_args=() + for f in "${ERROR_LOG_FILES[@]}"; do + [ -f "$f" ] && attach_args+=("-a" "$f") + done + # Fehlerfall → Fehlermail an ERRORMAIL (oder Fallback LOGMAIL), mit Attachments + send_error_mail \ + "${MAIL_BETREFF_UPGRADE:-BI Job Upgrade}${MAIL_BETREFF_SUFFIX_FEHLER:-}" \ + "$MASTERLOG" \ + "${attach_args[@]}" +fi