#!/bin/bash ############################### #############Usage############# ######.txt file to MySQL####### ############################### #############Datum############# ###########15-04-2014########## ############################### #############Autor############# ###########Lunetikk############ ############################### #Endlosschleife while true do #Pfad zu Logdatei LOGPFAD=/home/pi/script/meldunglogs/mysqlinsert.log #Pfad zu den lokalen Textdateien PFAD=/var/www/meldung/meldungen/ #Pfad zu den lokalen Textdateien nach einlesen USEDPFAD=/var/www/meldung/used/ #Username von MYSQL MYSQLUSER= #Passwort von MYSQL MYSQLPW= #Datenbank mit Tabelle DBTABLE=mysql.Meldungen #Datenbank - Spalten der Tabelle SSTATUS=Status SDATUM=Datum SUHRZEIT=Uhrzeit SSTANDORT=Standort SMELDUNG=Meldung SALARMFENSTER=Alarmfenster #Name der lokalen Textdateien. Alle Dateien mit Endung .txt werden gelesen, durch head -1 jedoch nur eine genommen und in var DATA geschrieben DATA=`ls $PFAD. | grep .txt | head -1` #Wenn es eine Datei mit Endung .txt gibt, dann if [ -n "$DATA" ] then #i wird initialisiert i=1 #wird für Leerzeichen benötigt, da diese sonst in der DB nicht richtig erscheinen (alle Zeilen sind in eine Tabellenzeile) IFS=$'\012' #fuer jede Zeile in der Datei DATA, mache for i in $(cat $PFAD$DATA); do #Spalte f1 beinhaltet den Status und wird deshalb in var STATUS geschrieben. cut trennt die Spalte mit -d "|" ("|" ist Trennzeichen auf. IFS ist wie erwaehnt für die Leerzeichen notwendig. STATUS=$(echo $i | cut -d "|" -f1 | tr "$IFS" '\n') DATUM=$(echo $i | cut -d "|" -f2 | tr "$IFS" '\n') UHRZEIT=$(echo $i | cut -d "|" -f3 | tr "$IFS" '\n') STANDORT=$(echo $i |cut -d "|" -f4 | tr "$IFS" '\n') MELDUNG=$(echo $i | cut -d "|" -f5 | tr "$IFS" '\n') #Hier wird für eine Popup Warnmeldung im Fall eines Alarms eine 1 in der Tabellenspalte Alarmfenster gesetzt. Wenn es kein Alarm ist, eine 0 if [ $STATUS==Alarm ] then #Stellt Verbindung zu mysql her mit -u USERNAME und --password PASSWORT. fuer anderen Hostnamen ist -h HOSTNAME zu verwenden #Danach wird mit INSERT die DATENBANK.TABELLE gewählt und die Tabellen Spalten mit den variablen $VARIABLEN beschrieben mysql -u $MYSQLUSER --password=$MYSQLPW << EOFMYSQL INSERT INTO $DBTABLE ($SSTATUS, $SDATUM, $SUHRZEIT, $SSTANDORT, $SMELDUNG, $SALARMFENSTER) VALUES ('$STATUS', '$DATUM', '$UHRZEIT', '$STANDORT', '$MELDUNG', 1); EOFMYSQL else #Stellt Verbindung zu mysql her mit -u USERNAME und --password PASSWORT. fuer anderen Hostnamen ist -h HOSTNAME zu verwenden #Danach wird mit INSERT die DATENBANK.TABELLE gewählt und die Tabellen Spalten mit den variablen $VARIABLEN beschrieben mysql -u $MYSQLUSER --password=$MYSQLPW << EOFMYSQL INSERT INTO $DBTABLE ($SSTATUS, $SDATUM, $SUHRZEIT, $SSTANDORT, $SMELDUNG, $SALARMFENSTER) VALUES ('$STATUS', '$DATUM', '$UHRZEIT', '$STANDORT', '$MELDUNG', 0); EOFMYSQL fi done #Die vergebenen Variablen werden mit ihrem Inhalt in eine Logdatei geschrieben echo "----------------------------------------------" >> $LOGPFAD; #Trennlinie zwischen Datensaetzen echo "Data" $PFAD$DATA >> $LOGPFAD; echo "Status" $STATUS >> $LOGPFAD; echo "Datum" $DATUM >> $LOGPFAD; echo "Uhrzeit" $UHRZEIT >> $LOGPFAD; echo "Standort" $STANDORT >> $LOGPFAD; echo "Meldung" $MELDUNG >> $LOGPFAD; #Die lokale Datei wird in den Ordner "used" verschoben, damit diese nicht erneut eingelesen wird. mv $PFAD$DATA $USEDPFAD$DATA fi #kurze Pause -> weniger CPU-Auslastung (Auswirkung = 1 Datei/sek, sonst 2-3 Dateien/sek) sleep 1 done