BASH: Wer hat was gemacht

Viele User die am System arbeiten: Nachher will es keiner gewesen sein, wenn das System Fehler produziert.

Eine Log-Datei, die den User und alle abgesetzten Befehle mit PID und Return-Value aufzeichnet, schafft Transparenz. Editieren wir zuerst die /etc/bash.bashrc und fügen

1
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

hinzu. Damit weisen wir an, alle eingeben Befehle dem „logger“ zu übergeben, an den rsyslog Channel „local6“ mit Username und Rückgabewert zu übergeben. sed beschneidet lediglich die lfd. Nummer aus der Historie. Jetzt leiten wir local6 in eine Datei um. Dazu editieren wir /etc/rsyslog.conf und fügen hinzu:

1
local6.*    /var/log/historie

Auch wenn der User innerhalb der Session wechselt, ist das jetzt nachvollziehbar. Wenn jemand andere Lösungen kennt, bitte mailen oder anrufen.

BASH: Auswertung Rückgabewert

Riesige TAR-Files und langsame Internetverbindungen sind der Garant für Frust und fehlerhafte Backups. Ein kleines Script sorgt für penetrante Neustarts bis die Aufgabe erledigt ist.

1
2
3
4
5
6
7
8
#!/bin/bash
ergebnis=1
 
until [ $ergebnis -eq 0 ]
do
	rsync -avP /Sicherung.tar  user@host:.
	ergebnis=$?
done

Der Prozess rsync gibt „return 0“ zurück, wenn er erfolgreich beendet wir. Bricht der Prozess aus irgendeinem Grund ab – zB. Verbindungsabbruch- wird der Prozess neu gestartet.

Ganz besonders fein, wenn man je nach return Wert, zum Beispiel eine EMail generieren lässt.

Individuelle Anwendungen

HAL52 ist überdimensioniert. Viel Platz und Leistungsreserven für Ihre individuelle Anwendungen.

Viele Geräte in ihrem Netzwerk können technisch angesprochen und befragt werden. Sie antworten mehr oder weniger freudig.

Es können Drucker, PC’s oder Fernsehgeräte sein. In meinem kleinen Beispiel sind es IP Kameras. Mit einem kleinen BASH Script, das alle 5 Minuten gestartet wird, sammle ich Daten über Zustand und Arbeit der IP Kameras, die Bestandteil einer Meldeanlage sind.

„Individuelle Anwendungen“ weiterlesen

Bash: Webhooks in MS Teams

Beispiel für die Nutzung von Webhooks in Microsoft Teams.

Microsoft Teams lässt sich hervorragend für den EDV Support nutzen. Wie wäre es wenn der Kunde von der Website aus, direkt in den Techniker Kanal im Teams posten kann? Oder der Kundenserver im Fall einer Warnung, diese direkt publiziert?

Ein Webhook läßt sich jedem Kanal in jedem Team hinzufügen – Wir haben im Workshop ausgiebig geübt. Bisher haben wir Webhooks genutzt, um via Microsoft Visual Code, ganze Listings oder einzelne Zeilen im Micosoft Teams zu publizieren und zu diskutieren. Kopieren wir uns die URL des Webhooks.

Einstellung / Verwaltung der Connectoren in einem Kanal

Wie überträgt man nun eine Nachricht über den Webhook an den Microsoft Teams Kanal? Kurz: curl -H „Content-Type: application/json“ -d JSON URL. Diese Zeile in einem Bashscript würde ausreichen um eine Nachricht, als JSON Datensatz formatiert, der Webhook URL zu übergeben. Als Beispiel ein Bash Script:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/sh
 
# Thomas Schilling Oktober 2019
# Testscript Webhook in Microsft Teams
 
WEBHOOK_URL="https://outlook.office.com/webhook/...."
TITLE=$1
shift
COLOR="#FF0000"
TEXT=$1
 
MESSAGE=$( echo ${TEXT} | sed 's/"/\"/g' | sed "s/'/\'/g" )
JSON="{\"title\": \"${TITLE}\", \"themeColor\": \"${COLOR}\", \"text\": \"${MESSAGE}\" }"
 
curl -H "Content-Type: application/json" -d "${JSON}" "${WEBHOOK_URL}"

Mit Aufruf des Bash Scripts übergeben wir eine Überschrift und einen Text. Das ist beliebig. Zum Beispiel möchte ich aktuelle Warnmeldungen der bund.de im Kanal veröffentlichen. In einem vorherigen Workshop haben wir mit den Wetterdaten bereits gespielt. Das PHP Script nutzen wir.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$url = file_get_contents('https://warnung.bund.de/bbk.mowas/gefahrendurchsagen.json');
 
$json = json_decode($url);
$z = 0;
foreach ($json as $idx => $inhalt){
$m1 = $inhalt->info[0]->headline;
$m2 = $inhalt->info[0]->description;
        foreach ($inhalt->info[0]->area as $id2 => $in2){
                if ($in2->geocode[0]->value=='053780000000'){
                    $z++;
                    print('{"data": { "head": "'.$m1.'"}}');                
                    shell_exec('/teams.sh "'.$m1.'" "'.$m2.'"');
                } 
       }
}
if ($z==0){
print('{"data": { "head": "keine Gefahrenmeldung"}}');
}
?>

In den Zeilen 7 und 8 werden Überschrift und Gefahrenmeldung aus dem SOAP Array gelesen. In Zeile 13 rufen wir das obige Bash Script auf – In Zeile 8 des Bash Scripts teilen wir die übergebenen Texte. Die Farbe, der Meldung in Teams, ist im Bash Script in Zeile 13 im JSON Datensatz.

Meldung im Kanal
Gefahrenmeldung mit auffälliger Farbe im Kanal

Mit dem Bash Script lässt sich jeder Text publizieren. Zum Beispiel Fehlermeldungen oder Warnungen eines Kundenservers.

Agorum OCR Lösung

Einfache Konvertierung von nicht OCR fähigen PDF Dateien für die Indexierung im Agorum DMS System.

Einfache Scanner kopieren Belege als Bilddatei und sind damit nicht im Klartext lesbar. Nicht lesbar bedeutet, das ein Archivsystem nicht in der Lage ist, den Beleg ein zu sortieren oder wieder zu finden.

Ich selbst arbeite auch mit solch einem einfachen Scanner und statte meine Dateiablage mit einem kleinem Script aus, welches die PDF auf ihre Lesbarkeit hin überprüft und diese ggf. übersetzt.

In der Praxis hat es sich bewährt, Belege grundsätzlich zu paginieren – mit einer laufenden, einmaligen Zahl zu versehen. Sie lassen sich dann eindeutig in der Buchhaltung und im DMS System identifizieren und verknüpfen.

Den Code stelle ich zur Verfügung.

Mit dem Code muss gespielt werden, da das Ergebnis stark von der Qualität des Scanners abhängt. Mit meinem Scanner ist eine Auflösung von 300dpi mit einer Graustufentiefe von 8 optimal. Auch kann ich auf den Einsatz des Programms UNPAPER verzichten – dieses würde Schlieren und Streifen entfernen.

Die erkannten Texte lassen sich in die PDF, also nicht als anhängende Seiten, integrieren. Mit Absicht hänge ich den OCR Text aber an das original PDF um direkt eventuelle Ungenauigkeit zu erkennen und diese im Agorum durch hinzufügen von Notizen zu ergänzen.