Hallo zusammen, ich habe ein keines script geschrieben um Systemwerte zu überwachen. Wenn ich das script im run level 2 und höher starte ist alles ok, packe ich es in /ect/init.d/boot.local dann kommt es direkt nach dem start zum reboot. Ich hoffe einer der Profis kann mir helfen - ist sicher was dummes..... Michael :-) #!/bin/bash # # Variabeln auf die Bedürfnisse anpassen ADMIN_EMAIL="michael# lokale Empfänger der Infomails SLEEP=30 # Wartezeit FAN_ALARM=5000 # minimaler Wert für Lüfterumdrehung CPU_ALARM=50 # maximaler Wert für CPU Temperatur CPU_WARN=45 # Schwellenwert für CPU Temp. Warnung ################################################################################## # Prüfen ob senor daten existieren if [ ! -d /proc/sys/dev/sensors/w83782d-i2c-0-29 ] ; then echo "Error: /proc/sys/dev/sensors/w83782d-i2c-0-29 does not exist" logger -t healthd "Error: /proc/sys/dev/sensors/w83782d-i2c-0-29 does not exist" exit 1 fi # aufräumen vor start if [ -e /tmp/HealthMB.Alarm ] ; then rm /tmp/HealthMB.Alarm fi if [ -e /tmp/HealthCPU.Alarm ] ; then rm /tmp/HealthCPU.Alarm fi # trap signals trap " echo \"healthd: beendet\" ; logger -t healthd \" beendet \" ; exit 1" 1 2 3 4 5 6 7 9 10 12 15 # Werte aus /proc lesen mb_Temp="`cat /proc/sys/dev/sensors/w83782d-i2c-0-29/temp1 | awk '{print $NF}' `" cpu0Temp="`cat /proc/sys/dev/sensors/w83782d-i2c-0-29/temp2 | awk '{print $NF}' `" cpu0Fan="`cat /proc/sys/dev/sensors/w83782d-i2c-0-29/fan1 | awk '{print $NF}' `" # Infos drucken echo "healthd: gestartet" echo " Motherboad Temperatur: $mb_Temp°C ($MB_ALARM°C / $MB_WARN°C)" echo " CPU Temperatur: $cpu0Temp°C ($CPU_ALARM°C / $CPU_WARN°C)" echo " Lüftergeschwindigkeit: $cpu0Fan /min ($FAN_ALARM/min)" ###### die echo werden noch ausgeführt, aber im /var/log/messages steht nichts ###### vom logger logger -t healthd " started " logger -t healthd " Motherboad Temperatur: $mb_Temp°C ($MB_ALARM°C / $MB_WARN°C)" logger -t healthd " CPU Temperatur: $cpu0Temp°C ($CPU_ALARM°C / $CPU_WARN°C)" logger -t healthd " Lüftergeschwindigkeit: $cpu0Fan /min ($FAN_ALARM/min)" while true ; do # Werte aus /proc lesen mb_Temp="`cat /proc/sys/dev/sensors/w83782d-i2c-0-29/temp1 | awk '{print $NF}' `" cpu0Temp="`cat /proc/sys/dev/sensors/w83782d-i2c-0-29/temp2 | awk '{print $NF}' `" cpu0Fan="`cat /proc/sys/dev/sensors/w83782d-i2c-0-29/fan1 | awk '{print $NF}' `" # Lüfter unter $FAN_ALARM = shutdown !! if [ `echo $cpu0Fan | cut -c 1-4` -lt $FAN_ALARM ] ; then sensors | mail -s "*** HEALTH ALARM LüFTER zu langsam SHUTDOWN !! ***" $ADMIN_EMAIL logger -t healthd " Lüfter zu langsam (unter $FAN_ALARM/min) SHUTDOWN !! $cpu0Fan /min" shutdown -h now "Lüfter zu langsam (unter $FAN_ALARM/min)!!" fi # CPU Temperatur über $CPU_ALARM = shutdown !! if [ `echo $cpu0Temp | cut -c 1-2` -gt $CPU_ALARM ] ; then sensors | mail -s "*** HEALTH ALARM CPU ist $CPU_ALARM°C heiß SHUTDOWN !!***" $ADMIN_EMAIL logger -t healthd " CPU zu heiß (über $CPU_ALARM°C) SHUTDOWN !! $cpu0Temp°C" shutdown -h now "CPU zu heiß (über $CPU_ALARM) !!" fi # CPU Temperatur über $CPU_WARN if [ `echo $cpu0Temp | cut -c 1-2` -gt $CPU_WARN ] ; then if [ ! -e /tmp/HealthCPU.Alarm ] ; then sensors | mail -s "*** HEALTH WARNUNG CPU über $CPU_WARN°C heiß ***" $ADMIN_EMAIL logger -t healthd " CPU Warnung (über $CPU_WARN°C) $cpu0Temp°C" touch /tmp/HealthCPU.Alarm SLEEP=10 fi else # CPU Temperatur unter $CPU_WARN if [ -e /tmp/HealthCPU.Alarm ] ; then sensors | mail -s "*** HEALTH OK CPU unter $CPU_WARN°C ***" $ADMIN_EMAIL logger -t healthd " CPU OK (wieder unter $CPU_WARN°C) $cpu0Temp°C" rm /tmp/HealthCPU.Alarm SLEEP=30 fi fi sleep $SLEEP done
On Son, 07 Jul 2002 at 17:20 (+0200), Michael Hoeller wrote:
ich habe ein keines script geschrieben um Systemwerte zu überwachen. Wenn ich das script im run level 2 und höher starte ist alles ok, packe ich es in /ect/init.d/boot.local dann kommt es direkt nach dem start zum reboot.
1. boot.local wird _vor_ dem Wechsel in irgendeinen Run-Level aufgerufen! Das steht im Übrigen auch im Template drin: # Here you should add things, that should happen directly after # booting before we're going to the first run level. Dienste, die erst mit dem Wechsel in einen Run-Level gestartet werden, stehen Dir hier also noch nicht zur Verfügung. 2. Es ist keine gute Idee, ein Programm in boot.local zu starten, welches eine Endlos-Schleife ausführt. Damit kommst du nie in einen benutzbaren Systemzustand, weil der Boot-Vorgang hier hängenbleibt. 3. Ich vermute, dass einer der exit-Aufrufe den boot beendet und zum Reboot führt - wie startest du das Script denn? 4. Mit trap kannst Du nicht alle Signale abfangen. SIGKILL und SIGSTOP zumindest werden immer ausgeführt. Ich würde das Script eher in einen Runlevel packen - und in den Hintergrund schicken, damit der aufrufende Prozess auch wieder zurück kommt ;-) Dann solltest Du aber die echo-Aufrufe rausschmeissen - wohin soll das Script denn ausgeben, wenn es im Hintergrund läuft? Jan
Hi Jan, danke für die Tipps, ich habe da noch ein paar Fragen: Am Sonntag, 7. Juli 2002 18:47 schrieb Jan Trippler:
On Son, 07 Jul 2002 at 17:20 (+0200), Michael Hoeller wrote:
ich habe ein keines script geschrieben um Systemwerte zu überwachen. Wenn ich das script im run level 2 und höher starte ist alles ok, packe ich es in /ect/init.d/boot.local dann kommt es direkt nach dem start zum reboot.
Dienste, die erst mit dem Wechsel in einen Run-Level gestartet werden, stehen Dir hier also noch nicht zur Verfügung. Die nötigen Daten werden unmittelbar zuvor vom programm sensor bereitgestellt, das script ist aber zu schnell danachgekommen und hat default werte ausgewerte die zum shutdown geführt haben.
2. Es ist keine gute Idee, ein Programm in boot.local zu starten, welches eine Endlos-Schleife ausführt. Damit kommst du nie in einen benutzbaren Systemzustand, weil der Boot-Vorgang hier hängenbleibt. Ich habe das script in den Hintergrund geschickt so das der boot Vorgang weiter läuft. Wenn aber boot.local kein gute Platz ist wo bringe ich das denn unter level S oder 1 ? Entscheidend ist eigentlich nur das sensor *vor* den script gestartet wird. In welche Datei trage ich denn die Aufrufe ein wenn ich z.B. runlevel 1 nähme?
3. Ich vermute, dass einer der exit-Aufrufe den boot beendet und zum Reboot führt - wie startest du das Script denn? Im Hintergrund
Ich würde das Script eher in einen Runlevel packen - und in den Hintergrund schicken, damit der aufrufende Prozess auch wieder zurück kommt ;-) s. o. In welchen und wie?
Dann solltest Du aber die echo-Aufrufe rausschmeissen - wohin soll das Script denn ausgeben, wenn es im Hintergrund läuft? Sorry das ist mein Fehler, ich wollte nicht das ganz script, das zu lang, kopieren und habe Testversion mit den echos kopiert. Asche auf mein Haupt.
Auf jeden Fall vielen Dank für die Tipps Michael
Jan
On Son, 07 Jul 2002 at 22:01 (+0200), Michael Hoeller wrote:
Hi Jan,
danke für die Tipps, ich habe da noch ein paar Fragen:
Am Sonntag, 7. Juli 2002 18:47 schrieb Jan Trippler:
On Son, 07 Jul 2002 at 17:20 (+0200), Michael Hoeller wrote:
ich habe ein keines script geschrieben um Systemwerte zu überwachen. Wenn ich das script im run level 2 und höher starte ist alles ok, packe ich es in /ect/init.d/boot.local dann kommt es direkt nach dem start zum reboot.
Dienste, die erst mit dem Wechsel in einen Run-Level gestartet werden, stehen Dir hier also noch nicht zur Verfügung. Die nötigen Daten werden unmittelbar zuvor vom programm sensor bereitgestellt, das script ist aber zu schnell danachgekommen und hat default werte ausgewerte die zum shutdown geführt haben.
OK, wenn nichts anderes benutzt wird ... Es läuft ja nun, wie Du geschrieben hast.
2. Es ist keine gute Idee, ein Programm in boot.local zu starten, welches eine Endlos-Schleife ausführt. Damit kommst du nie in einen benutzbaren Systemzustand, weil der Boot-Vorgang hier hängenbleibt. Ich habe das script in den Hintergrund geschickt so das der boot Vorgang weiter läuft. Wenn aber boot.local kein gute Platz ist wo bringe ich das denn unter level S oder 1 ? Entscheidend ist eigentlich nur das sensor *vor* den script gestartet wird. In welche Datei trage ich denn die Aufrufe ein wenn ich z.B. runlevel 1 nähme?
Wenns im Hintergrund läuft, ok - dann blockiert es auch nicht.
3. Ich vermute, dass einer der exit-Aufrufe den boot beendet und zum Reboot führt - wie startest du das Script denn? Im Hintergrund
und offensichtlich in einer Subshell, also lag ich mit meiner Vermutung falsch. Dann führt ein exit im Script nur zum Beenden der Subshell, nicht des boot.
Ich würde das Script eher in einen Runlevel packen - und in den Hintergrund schicken, damit der aufrufende Prozess auch wieder zurück kommt ;-) s. o. In welchen und wie?
Wenn, dann in allen, in denen Du es brauchst. Aber - s. o. - da es offensichtlich in boot.local lauffähig ist und nicht von anderen (evtl. erst später gestarteten) Diensten abhängig ist, kann es ruhig da bleiben. Jan
Michael Hoeller schrieb:
Hallo zusammen,
ich habe ein keines script geschrieben um Systemwerte zu überwachen. Wenn ich das script im run level 2 und höher starte ist alles ok, packe ich es in /ect/init.d/boot.local dann kommt es direkt nach dem start zum reboot.
Ich hoffe einer der Profis kann mir helfen - ist sicher was dummes.....
Michael :-)
Es war ein dummer Fehler, ich habe in boot.local sensors aufgerufen und gleich danach das Script zum Auswerten der Daten gestarte. Zum Zeitpunkt der ersten Bewertung waren die Werte in /proc/....sensors/.. noch mit default (max) Werten gefüllt welche mein Script interpretiert hat..... Die einfache Lösung ist ein bischen zu warten "sleep 30" genügt und da im Hintergrund macht's auch nichts. Michael :-)
participants (2)
-
Jan.Trippler@t-online.de
-
MichaelHoeller@t-online.de