Neu Abgleichs Fehler Warnung

mnause

Aktives Mitglied
19. Juli 2016
89
17
Essen
Firma
NAAM Distribution GmbH
Hallo da man nicht immer sofort mitbekommt das der Abgleich einen Fehler hat habe ich etwas gebastelt

Auf einem Debian System läuft via Cron folgendes check-sync-status.sh Skript

config.conf

Code:
# === SQL Server Verbindungsdetails ===
DB_SERVER=""
DB_USER=""
DB_PASS=""
DB_NAME=""

# === SQL-Abfragen ===
SQL_SYNC_QUERY="SELECT TOP 1 [cStatusMeldung] FROM [Mandant_1].[Sync].[tSyncLogsitzung] ORDER BY dEnde DESC;"

# === Skriptspezifische Konfiguration ===

# SQL-Export
SQL_LOG_DIR="/home/developer/log/sql"

# === E-Mail Versand Konfiguration ===
MAIL_TO=""                                      # Empfängermail
MAIL_FROM=""                     # Absendermail

# Dynamische Betreffzeilen für verschiedene Log-Typen
SUBJECT_INVOICE="Invoice Upload Log"
SUBJECT_SQL_EXPORT="SQL Export Log"
SUBJECT_CAM_SORT="Cam Record Sort Log"
SUBJECT_DEFAULT="System Log"

# === Fehler-Handling für Sync-Abfrage ===
ERROR_TEXT="Der Abgleich wurde abgebrochen."
EMAIL_COOLDOWN_TIME=1800  # 30 Minuten Cooldown in Sekunden

# === Log-Verwaltung ===
LOG_DIR="/home/developer/log"
MAX_LOG_FILES=30

check-sync-status.sh

Bash:
#!/bin/bash

# === Konfiguration einlesen ===
CONFIG_FILE="/home/developer/scripts/config.conf"
if [ -f "$CONFIG_FILE" ]; then
    source "$CONFIG_FILE"
else
    echo "❌ FEHLER: Konfigurationsdatei '$CONFIG_FILE' nicht gefunden!" >&2
    exit 1
fi

# === Verzeichnisse setzen ===
mkdir -p "$SQL_LOG_DIR"
LOCK_DIR="$SQL_LOG_DIR/lock"
mkdir -p "$LOCK_DIR"

# === Lock-Datei im Unterverzeichnis setzen ===
EMAIL_COOLDOWN_FILE="$LOCK_DIR/sync-error-email.lock"

# === Log-Datei erstellen ===
LOG_TIMESTAMP=$(date +%Y-%m-%d_%H-%M)
LOG_FILE="$SQL_LOG_DIR/sync-check-$LOG_TIMESTAMP.log"

# === SQL-Abfrage ausführen und speichern ===
echo "🔍 Führe SQL-Abfrage aus..." | tee "$LOG_FILE"
/opt/mssql-tools18/bin/sqlcmd -S "$DB_SERVER" -U "$DB_USER" -P "$DB_PASS" -d "$DB_NAME" -C -Q "$SQL_SYNC_QUERY" -h -1 -W 2>&1 | tee -a "$LOG_FILE"

# === Prüfen, ob der Fehlertext in der Abfrage enthalten ist ===
if grep -q "$ERROR_TEXT" "$LOG_FILE"; then
    echo "⚠️ Abgleich wurde abgebrochen! Prüfe, ob eine Benachrichtigung gesendet werden kann..." | tee -a "$LOG_FILE"

    # Prüfe, ob eine E-Mail-Sperre aktiv ist
    if [ -f "$EMAIL_COOLDOWN_FILE" ]; then
        LAST_EMAIL_TIME=$(stat -c %Y "$EMAIL_COOLDOWN_FILE")
        CURRENT_TIME=$(date +%s)
        TIME_DIFF=$((CURRENT_TIME - LAST_EMAIL_TIME))

        if [ $TIME_DIFF -lt $EMAIL_COOLDOWN_TIME ]; then
            REMAINING_TIME=$((EMAIL_COOLDOWN_TIME - TIME_DIFF))
            echo "⏳ Benachrichtigung bereits gesendet. Nächste in $REMAINING_TIME Sekunden möglich." | tee -a "$LOG_FILE"
            exit 0
        else
            echo "🔄 Cooldown abgelaufen. Sende neue Benachrichtigung..." | tee -a "$LOG_FILE"
            /bin/bash /home/developer/scripts/send-log-email.sh "$LOG_FILE"
            curl -s "https://api.callmebot.com/whatsapp.php?phone=######&text=Achtung+WAWI+Abgleichfehler&apikey=#######" > /dev/null
            touch "$EMAIL_COOLDOWN_FILE"
        fi
    else
        echo "📧 Erster Fehler erkannt. Sende Benachrichtigung..." | tee -a "$LOG_FILE"
        /bin/bash /home/developer/scripts/send-log-email.sh "$LOG_FILE"
        curl -s "https://api.callmebot.com/whatsapp.php?phone=#######&text=Achtung+WAWI+Abgleichfehler&apikey=######" > /dev/null
        touch "$EMAIL_COOLDOWN_FILE"
    fi

    # Maximal 30 Log-Dateien behalten
    find "$SQL_LOG_DIR" -type f -name "sync-check-*.log" | sort -r | tail -n +$((MAX_LOG_FILES+1)) | xargs rm -f
else
    echo "✅ Kein Fehler gefunden." | tee -a "$LOG_FILE"

    # Falls Sperrdatei existiert, aber kein Fehler mehr auftritt -> Lösche sie
    if [ -f "$EMAIL_COOLDOWN_FILE" ]; then
        echo "🗑️ Fehler behoben, lösche Sperrdatei." | tee -a "$LOG_FILE"
        rm -f "$EMAIL_COOLDOWN_FILE"
    fi

    # Lösche das Log, da kein Fehler aufgetreten ist
    echo "🗑️ Kein Fehler gefunden. Lösche Log-Datei." | tee -a "$LOG_FILE"
    rm -f "$LOG_FILE"
fi

echo "✅ Skript abgeschlossen."
exit 0

send- log-email.sh

Bash:
#!/bin/bash

# === Konfiguration einlesen ===
CONFIG_FILE="/home/developer/scripts/config.conf"
if [ -f "$CONFIG_FILE" ]; then
    source "$CONFIG_FILE"
else
    echo "❌ FEHLER: Konfigurationsdatei '$CONFIG_FILE' nicht gefunden!"
    exit 1
fi

# Argumente: Log-Datei, optional SQL-Export-Datei, optional E-Mail-Adresse für SQL-Export
LOG_FILE="$1"
ATTACHMENT="$2"
EMAIL_TO="$3"

# === PRÜFUNGEN ===
if [ -z "$LOG_FILE" ] || [ ! -f "$LOG_FILE" ]; then
    echo "❌ Fehler: Keine gültige Log-Datei angegeben."
    exit 1
fi

# Dynamischer Betreff basierend auf der Log-Datei
LOG_FILENAME=$(basename "$LOG_FILE")
if [[ "$LOG_FILENAME" == *"sql-export"* ]]; then
    SUBJECT="$SUBJECT_SQL_EXPORT - $(date +%Y-%m-%d)"
elif [[ "$LOG_FILENAME" == *"invoice-upload"* ]]; then
    SUBJECT="$SUBJECT_INVOICE - $(date +%Y-%m-%d)"
elif [[ "$LOG_FILENAME" == *"cam-rec-sort"* ]]; then
    SUBJECT="$SUBJECT_CAM_SORT - $(date +%Y-%m-%d)"
else
    SUBJECT="$SUBJECT_DEFAULT - $(date +%Y-%m-%d)"
fi

# === Überprüfung & Installation von msmtp ===
if ! command -v msmtp &> /dev/null; then
    sudo apt update && sudo apt install -y msmtp msmtp-mta
fi

# Falls keine spezielle E-Mail für den Export angegeben wurde, Standard-Mail-Adresse verwenden
if [ -z "$EMAIL_TO" ]; then
    EMAIL_TO="$MAIL_TO"
    echo "📧 Keine spezielle E-Mail für Export angegeben, sende Log an Standard-Empfänger: $MAIL_TO"
fi

# Mehrere Empfänger in ein Array umwandeln (Trennung durch Leerzeichen)
IFS=' ' read -ra EMAIL_ADDRESSES <<< "$EMAIL_TO"

# === E-Mail-Versand für jeden Empfänger ===
for EMAIL in "${EMAIL_ADDRESSES[@]}"; do
    EMAIL=$(echo "$EMAIL" | xargs)  # Entfernt unnötige Leerzeichen

    if [ -n "$ATTACHMENT" ] && [ -f "$ATTACHMENT" ]; then
        echo "📎 Sende SQL-Export mit Anhang an: $EMAIL"

        (
            echo "Subject: $SUBJECT"
            echo "From: $MAIL_FROM"
            echo "To: $EMAIL"
            echo "Content-Type: multipart/mixed; boundary=boundary123"
            echo "MIME-Version: 1.0"
            echo ""
            echo "--boundary123"
            echo "Content-Type: text/plain; charset=UTF-8"
            echo ""
            cat "$LOG_FILE"
            echo ""
            echo "--boundary123"
            echo "Content-Type: text/csv; name=$(basename "$ATTACHMENT")"
            echo "Content-Disposition: attachment; filename=$(basename "$ATTACHMENT")"
            echo "Content-Transfer-Encoding: base64"
            echo ""
            base64 "$ATTACHMENT"
            echo "--boundary123--"
        ) | sudo msmtp -a default "$EMAIL" 2>/dev/null
    else
        echo "📧 Sende Log-Datei ohne Anhang an: $EMAIL"

        (
            echo "Subject: $SUBJECT"
            echo "From: $MAIL_FROM"
            echo "To: $EMAIL"
            echo "Content-Type: text/plain; charset=UTF-8"
            echo "MIME-Version: 1.0"
            echo ""
            cat "$LOG_FILE"
        ) | msmtp -a default "$EMAIL" 2>/dev/null
    fi
done

exit 0

Das ganze Informiert über den Fehler Per Mail und per WhatsApp.

Was haltet ihr davon ?
Ich bin für Verbesserungsvorschläge offen .
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: no80
Ähnliche Themen
Titel Forum Antworten Datum
Beantwortet Workflow Datei schreiben Dateiname per Dotliquid Fehler Illegales Zeichen im Pfad. callerMemberName : WriteFile JTL-Workflows - Fehler und Bugs 1
Neu Unterstützung bei JTL FFN Retouren – Fehler in der API-Übertragung von Returnless Starten mit JTL: Projektabwicklung & Migration 0
Fehler beim Verknüpfen von JTL-FFN mit Wawi – „Anmeldung nicht möglich“ JTL-Wawi 1.11 1
Neu Fehler eBay-Abgleich eBay-Anbindung - Fehler und Bugs 19
Neu Anmeise Mediendateien Import Fehler JTL-Ameise - Fehler und Bugs 4
Wawi API REST-Server lässt sich nicht einrichten / Fehler 404 JTL-Wawi 1.11 1
Neu Fehler beim Shopabgleich - Duplicate Entry Allgemeine Fragen zu JTL-Shop 2
Neu eazyAuction holt keine Bestellung mehr von Amazon ab, im Logbuch "Fehler" ohne weitere Angabe Amazon-Anbindung - Fehler und Bugs 1
Neu JTL Track&Trace API Fehler derzeit? seit 15:50 Uhr JTL-Track&Trace - Fehler und Bugs 2
Neu Aktuellen JTL Shop installieren *Fehler* Installation / Updates von JTL-Shop 0
Neu FBA-Lagerbestand wird nicht mehr eingelesen - Fehler beim Verarbeiten von Amazon Events - FbaInventoryImported: Das angegebene Argument liegt außerha Amazon-Anbindung - Fehler und Bugs 13
Fehler Export PDF Datei / Senden per Email JTL-Wawi 1.11 2
Neu Amazon Bestellungen werden nicht abgerufen - Fehler bei Account 'XXX' []: Ihr Account ist nicht aktiv. Amazon-Anbindung - Fehler und Bugs 5
Neu Amazon eazyAuction Lizenz Fehler? Amazon-Anbindung - Fehler und Bugs 1
AmzLister 2.0 Fehler 99022 beim Vaterartikel Amazon-Lister - Fehler und Bugs 0
Bis alle Fehler behoben sind, nicht installieren. JTL-Wawi 1.11 32
Neu Abgleich bricht mit Fehler 503 ab Shopware-Connector 3
Verkauf - Fehler beim Laden der Daten JTL-Wawi 1.11 6
Neu Tagesabschluss Fehler BAR Bruttoumsatz / Fehler Zahlungsart BAR JTL-POS - Fehler und Bugs 0
Neu Worker Fehler - Fehlende Relation JTL-Wawi - Fehler und Bugs 1
Beantwortet Fehler bei Erstimport: Explicit Move is not supported for HerstellerSortMode.Alphabetical Shopware-Connector 1
Neu Bestellvorgang – Land und Postleitzahl werden nicht erkannt und HTTP-Fehler 500 bei der Lieferadresse JTL-Shop - Fehler und Bugs 11
Neu Fehler beim Bearbeiten der eMail-Templates JTL-Shop - Fehler und Bugs 2
Neu Fehler nach Update Produktseiten nicht mehr aufrufbar Installation / Updates von JTL-Shop 1
Neu Laufweg nicht mehr korrekt. Wir finden den Fehler nicht Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 0
Neu SQL Code für GPSR Felder (Kaufland) zeigt Fehler + wird daher nicht übertragen kaufland.de - Anbindung (SCX) 0
Neu Fehler 500 im Child-Template nach Umstieg von 5.3.3 auf 5.5.3 Templates für JTL-Shop 8
Neu Fehler beim Übertragen von Bildern JTL - Shopware Thumbnail Problem height width dürfen nicht leer sein Shopware-Connector 11
Neu VCS Fehler: keine Belege wegen eines deaktivierten Amazon Umsatzsteuer-Berechnungsservices Amazon-Anbindung - Fehler und Bugs 1
Neu Artikelseiten 500 HTTP Fehler PayPal Plugin 2.1.0 JTL Shop 5.4.0 Plugins für JTL-Shop 4
Neu Lister 2.0 "Verkäuferinventar anfordern" Fehler Amazon-Lister - Fehler und Bugs 0
Neu PayPal - PayPal Checkout - 221 – SQL Fehler Plugins für JTL-Shop 0
Neu Fehler bei Abgleich mit Shopify Shopify-Connector 5
In Diskussion Etikett mit Warnung bei Versand drucken JTL-Workflows - Ideen, Lob und Kritik 10

Ähnliche Themen