ich baue derzeit ein Diagnosesystem mit dem Debian Live Builder. Dafür habe ich Skripte geschrieben, welche diverse Diagnosetools aufrufen und abarbeiten. So Weit so gut, die Skripte machen was sie sollen, jetzt möchte ich die Skripte nach dem Systemstart automatisiert ausführen lassen. Ich habe ein Kontrollskript, welches alle anderen Skripte nacheinander abarbeitet. Ich habe dieses Skript in /etc/rc.local eingetragen.
Beim Start wird die rc.local auch ausgeführt, das Skript startet (es schreibt zumindest eine Fehlermeldung des ersten Skripts in das Logfile) und scheint dann abzubrechen.
Führe ich die rc.local nach dem Systemstart händisch aus, wird eine Fehlermeldung ausgegeben
Code: Alles auswählen
/skripte/startdiagnosis.sh: 15: /skripte/startdiagnosis.sh: function: not found
/skripte/startdiagnosis.sh: 16: /skripte/startdiagnosis.sh: [[:
/skripte/startdiagnosis.sh: 22: /skripte/startdiagnosis.sh: Syntax error: "}" unexpected:
Alle Skripte, sowie rc.local sind Ausführbar.. Ich weiß mir langsam keinen Rat mehr.
Ich hoffe ihr könnt mir weiter helfen.
Besten Dank und liebe Grüße
Phill
Anbei die Skripte, sowohl das Kontrollskript startdiagnosis.sh als auch das erste ausgeführte Skript dmesg.sh:
startdiagnosis
Code: Alles auswählen
#!/bin/bash
#Dieses Skript ist das Kontrollskript für alle weiteren Diagnosewerkzeuge
#Es startet die jeweiligen Diagnosetools und dokumentiert, ob diese problemlos durchgelaufen sind
#Erstellt Ordner zum Speichern der Logdateien
mkdir -p /tmp/Logfiles/tests
mkdir -p /tmp/Logfiles/bin
#Definitionen
LOGFILE='/tmp/Logfiles/summary.txt'
>$LOGFILE
#Da im Fehlerfall dmesg in die Logdatei geschrieben wird, prüft diese Funktion, ob dmesg erfolgreich geschrieben wurde
function dmesg2 {
if [[ $? -eq 0 ]]
then
echo "dmesg wurde erfolgreich vervollständigt" >>$LOGFILE
else
echo "dmesg fehlgeschlagen" >>$LOGFILE
fi
}
#Erstmalige Ausgabe von dmesg, dmesg-Log wird dabei gesäubert
./dmesg.sh
if [[ $? -eq 0 ]]
then
echo "dmesg geschrieben" >>$LOGFILE
else
echo "dmesg nicht geschrieben" >>$LOGFILE
fi
#Startet das Hardwareinventory und schreibt das Ergebnis in die Logdatei
./hardware.sh
if [[ $? -eq 0 ]]
then
echo "Hardwareinventory lshw abgeschlossen" >>$LOGFILE
else
echo "Hardwareinventory lshw fehlgeschlagen" >>$LOGFILE
./dmesg.sh
dmesg2
fi
./inxi.sh
if [[ $? -eq 0 ]]
then
echo "Hardwareinventory inxi abgeschlossen" >>$LOGFILE
else
echo "Hardwareinventory inxi fehlgeschlagen" >>$LOGFILE
./dmesg.sh
dmesg2
fi
#Startet den Hauptspeichertest und schreibt das Ergebnis in die Logdatei
#Die Exitcodeabfrage für den Hauptspeichertest arbeitet mit einem Switchcase-Verfahren, da es mehrere Exitcodes gibt
./memtest.sh
case $? in
0)
echo "Memtest erfolgreich" >>$LOGFILE
;;
1)
echo "Memtest fehlgeschlagen, Fehlercode 'x01 error alloccating or locking memory, or invocation error'" >>$LOGFILE
echo "fehlgeschlagen"
./dmesg.sh
dmesg2
./buildhtml.sh
./report.sh
exit 1
;;
2)
echo "Memtest fehlgeschlagen, Fehlercode 'x02 error during stuck address test'" >>$LOGFILE
./dmesg.sh
dmesg2
./buildhtml.sh
./report.sh
exit 2
;;
4)
echo "Memtest fehlgeschlagen, Fehlercode 'x04 error during one of the other tests'" >>$LOGFILE
./dmesg.sh
dmesg2
./buildhtml.sh
./report.sh
exit 4
;;
esac
echo "nach memtest"
#Startet den Smarttest und schreibt das Ergebnis in die Logdatei
./smart.sh
if [[ $? -eq 0 ]]
then
echo "Smarttest abgeschlossen" >>$LOGFILE
echo "smart1"
else
echo "smart2"
echo "Smarttest abgebrochen" >>$LOGFILE
./dmesg.sh
dmesg2
./buildhtml.sh
./report.sh
exit
fi
echo "nach smart"
#Startet die Virenprüfung und schreibt das Ergebnis in die Logdatei
#./clamav.sh
echo hallo
case $? in
0)
echo "Virenprüfung ohne Funde abgeschlossen!" >>$LOGFILE
;;
1)
echo "Virenprüfung mit Schädlingsfund abgeschlossen!" >>$LOGFILE
./buildhtml.sh
./report.sh
exit
;;
2)
echo "Virenprüfung wurde aufgrund eines Fehlers abgebrochen!" >>$LOGFILE
./buildhtml.sh
./report.sh
exit
;;
esac
#Startet die Suche und Komprimierung der Windowslogdateien. Auch hier wird Switchcase genutzt, da es mehrere Exitcodes gibt
./winlogs.sh
case $? in
0)
echo "Windowslogs verpackt" >>$LOGFILE
;;
1)
echo "Windowslogs nicht verpackt, Fehler beim Komprimieren mit xz" >>$LOGFILE
./dmesg.sh
dmesg2
./buildhtml.sh
./report.sh
exit
;;
2)
echo "Windowslogs nicht verpackt, Fehler beim Verpacken mit tar" >>$LOGFILE
./dmesg.sh
dmesg2
./buildhtml.sh
./report.sh
exit
;;
3)
echo "Es wurden keine Windowslogs gefunden" >>$LOGFILE
./dmesg.sh
dmesg2
./buildhtml.sh
./report.sh
exit
;;
esac
#Prüfe, ob dmesg erfolgreich geschrieben wurde
./dmesg.sh
dmesg2
echo "dmesg wurde erfolgreich vervollständigt" >>$LOGFILE
#Erzeugen der .html-Seite
./buildhtml.sh
#Archivieren aller Dateien und versenden der Email
./report.sh
#im uninetz noch einfügen und testen! skript ist fertig und funktionstüchtig
Code: Alles auswählen
#!/bin/bash
#Dieses Skript liest Systemmeldungen aus und schreibt sie in ein eigenes Logfile.
#Definitionen
LOGFILE='/tmp/Logfiles/tests/logdmesg.txt'
Datum=`date +%Y-%m-%d-%H-%M`
#Logfile erstellen, falls dieses nicht schon vorhanden ist
touch $LOGFILE
#Notiere Datum und gib dmesg aus, lösche danach dmesg
echo $Datum >> $LOGFILE
echo -e "Ausgabe von dmesg:\n" >> $LOGFILE
dmesg -c >> $LOGFILE
if [[ $? -eq 0 ]]
then
exit 0
else
exit 1
fi