Moin,
folgendes Problem: ich will durch die INFO-LED der Fritzbox 3370 wissen, ob fhem läuft.
Realisierbar über den CRON Dienst in Freetz der alle Stunde ein Shellscript ausführt.
folgende Befehle habe ich:
ps |grep -v grep| grep "fhem";
fhem status
folgender Befehl lässt die INFO LED angehen:
led-ctrl update_led1
leider habe ich gar keine Ahnung von BashScripten:
#!/bin/bash
my $check='ps |grep -v grep| grep "fhem"'; # ergibt 15316 root 15456 S /[PATH]/fhem /[PATH]/fhem.pl /[PATH]/fhem.cfg
if [fhem status == 'running' && $check>1] # status ist "running" und es existiert ein Prozess der fhem entspricht
led-ctrl update_led1;
exit 0;
else
fhem start;
exit 0;
fi
Anders Herum wäre es auch nicht schlecht; hat sich der fhemdienst aufgehängt, lasse die INFO LED ROT BLINKEN:
led-ctrl filesystem_mount_failure
geht das? kann man bei einem Prozess sehen, ob er sich aufgehangen hat?
Danke!!! ::)
1. Trick
wenn Du verwendest: "grep [f]em" brauchst Du den grep-Befehl selber nicht auszublenden
2. Trick
Du kannst den Befehl direkt in das if setzen
if `ps a | grep -q [f]em` then
dann trifft das if nur zu, wenn "grep" erfolgreich war
3. Trick, nur ausführen wenn der Prozess existiert, einfach mal Telnet ausprobieren
if `echo -en "passwort\nversion\nquit\n" | nc localhost 7072` then
wenn eines von beiden fehlschlägt, dann Status-Led=Offline
Weiß jetzt nicht, ob es bei der Fritzbox noch eifnacher geht, aber auf einem Linux-Server würde ich es so machen. Bitte jetzt nur noch die Tricks anpassen und zusammenführen.
Dankööööö,
CRONJob
*/10 * * * * /var/media/ftp/Sticky8it/tools/fhem/check.sh > /dev/null 2>&1
aber:
- ps|grep -v grep|grep "fhem" muss, da sonst die grep instanz auch aufgelistet wird
- zu viel Output beim Ausführen des Scripts...darum ab ins Nirvana > /dev/null 2>&1
- fhem lässt sich nach Aufruf des Shellscripts nicht mehr via TBFlex starten; wie kann man das fixen?
Weiss jemand meinen Code zu verbessern, denke das geht auch schöner; zB anstelle "echo | nc localhost 7072" die Alternative "fhem status == "running"" nehmen?
#!/bin/bash
if ps|grep -v grep|grep "fhem" && echo | nc localhost 7072
then
led-ctrl update_led1
exit 0
else
led-ctrl filesystem_mount_failure
perl /var/media/ftp/Sticky8it/tools/fhem/fhem.pl /var/media/ftp/Sticky8it/tools/fhem/fhem.cfg
exit 0
fi
1. NEIN, wenn Du ein grep [f]em machst, wird eben durch den "Trick" der "[]" die grep-Instant NICHT aufgelöst! Siehe meine Erklärung!
Ist übrigens ein superalter Unix-Trick
#!/bin/bash
if ps a | grep [f]hem && echo | nc localhost 7072
then
led-ctrl update_led1
else
led-ctrl filesystem_mount_failure
fi
ich würde mit diesem Script nicht fhem automatisch starten. Ein guter Watchdog ist es eben nicht ....
Ist es Absicht, das Du per nc zwar die Erreichbarkeit, aber nicht die Funktionsfähigkeit von fhem testest?
Kommt man mit einem "ps l" oder "ps w" ans selbe Ziel?
root:ps: invalid option -- a
BusyBox v1.20.2 (2012-10-12 16:13:27 CEST) multi-call binary.
Usage: ps
Show list of processes
w Wide output
l Long output
&
root:echo -en "passwort\nversion\nquit\n" | nc localhost 7072
Unknown command passwort, try help.
Daher mein gekürzter Code; läuft auf einer FB3370, Freetz &TBFlex und einem ungesicherten fhem.
Danke für die Hilfe- Läuft! 8)
Hier mal der Output der FB mit deinem,abgeänderten (ps -l) Script:
root:/var/media/ftp/Sticky8it/tools/fhem# sh check.sh
S 0 14288 1 15148 13244 0:0 02:51 00:01:11 /var/media/ftp/Sticky8it/tools/fhem/fhem /var/media/ftp/Sticky8it
S 0 22797 22795 1152 300 pts0 12:34 00:00:00 {busybox} grep fhem
SecurityCheck:
WEB,WEBphone,WEBtablet has no basicAuth attribute.
telnetPort has no password/globalpassword attribute.
Running with root privileges.
Restart fhem for a new check if the problem is fixed,
or set the global attribute motd to none to supress this message.
Zitat von: Wernieman am 30 Januar 2014, 07:45:04
- ich würde mit diesem Script nicht fhem automatisch starten. Ein guter Watchdog ist es eben nicht ....
- Ist es Absicht, das Du per nc zwar die Erreichbarkeit, aber nicht die Funktionsfähigkeit von fhem testest?
- Wie wäre deine Herangehensweise, für einen solchen Watchdog?
- hmm, eigentlich nicht. Leider bringt er den, unten erwähnten, Passwort error...
Dürfte daran liegen: "passwort\n"
Wenn Du kein passwort verwendet hast, bitte rauslöschen
Wie ich in meinem ersten Beitrag geschrieben habe:
Bitte jetzt nur noch die Tricks anpassen und zusammenführen.
*griiins*
Edit:
Wegen Watchdog:
Wenn jetzt FHEM beim starten abstürzt, wird es von Deinem watchdog immer wieder gestartet .... kann Dir also (vereinfacht gesagt) mittelfristig das System "zerschießen". Grundsätzlich ist die Idee richtig, man sollte nur für die verschiedenen Fälle eine Zusatzlogig einbauen. Einen Fall habe ich Dir gerade genannt ..... da bisher bei mir fhem sauber lief, solange der Fehler nicht vor dem Bildschirm saß, lasse ich es lieber mit einer Überwachung ....
interessanter Weise ist der Output bei echo -en "\nversion\nquit\n" inkl. der MotD, lasse ich den Zeilenumsprung weg, werden auch nur noch die aktiven Module angezeigt.
dein Trick, die grep Instanz nicht mit aufzullösen, funktioniert in meinem System einfach nicht.... ich muss bei ps |grep -v grep| grep "fhem"; bleiben.
wie wäre es so: fhem hängt-> INFO blinkt rot->Termination des alten und Neustart des FHEM Dienstes.-> INFO blinkt weiterhin rot, Usereingabe setzt den Watchdog zurück.
Somit wäre sogar die LED wieder frei, da Sinn und zweck des WD nur darin bestünde, Alarm zu schlagen, sollte sich der FHEM mal aufgehangen haben.
so läuft es jetzt bei mir:
check.sh#!/bin/bash
if ps |grep -v grep| grep "fhem" && echo -en "version\nquit\n" | nc localhost 7072
then
led-ctrl update_led1 #INFO LED leuchtet
else
led-ctrl filesystem_mount_failure #INFO LED blinkt Rot
fi
&
crond
*/10 * * * * sh /var/media/ftp/Sticky8it/tools/fhem/check.sh #alle 10 min wird check.sh ausgeführt
bringt mir ps |grep -v grep| grep "fhem">/dev/null 2>&1 && echo -en "version\nquit\n" | nc localhost 7072 >/dev/null 2>&1 irgendeinen Vorteil?
Da ich keine FritzBox habe, kann ich Dir dazu nichts sagen.....
ein "grep [f]hem" funktioniert wirklich nicht???? Es währe das erste Unix (Linux), wo ich so etwas gesehen hätte .....
Man beachte die "[", welche nur das "f" umranden
Zitat von: Wernieman am 30 Januar 2014, 13:43:26
Da ich keine FritzBox habe, kann ich Dir dazu nichts sagen.....
ein "grep [f]hem" funktioniert wirklich nicht???? Es währe das erste Unix (Linux), wo ich so etwas gesehen hätte .....
Man beachte die "[", welche nur das "f" umranden
OKOK, ich tippe es für dich mal manuell ein ;)
ps|grep [f]hem
14288 root 15148 S /var/media/ftp/Sticky8it/tools/fhem/fhem /var/media/ftp/Sticky8it/tools/fhem/fhem.pl /var/me
26566 root 1152 S {busybox} grep fhem
O.K. scheinbar kapselt die Fritzbox doppelt ..deshalb funktioniert der "Trick" nicht
man beachte: "{busybox}"
Hallo,
ZitatEs währe das erste Unix (Linux), wo ich so etwas gesehen hätte ....
Eine FritzBox hat auch kein richtiges Linux - eine
sudo apt-get update
funktioniert dort daher auch nicht.
Grüsse
<Klugscheißermodus>
Auf meinem gentoo-System (Linux!) funktioniert ein apt-get auch nicht, das ist debian-spezifisch
</Klugscheißermodus>
mal wieder zurück zum Thema;
habe ich ein crontab
*/10 * * * * sh /var/media/ftp/Sticky8it/tools/fhem/check.sh
könnte ich dann auch dem script sagen, dass es sich bei erfolgreichem fhem feststellen, seine Zeit auf 20min einstellen usw. bis es dann nurnoch stündlich läuft und am Anfang dann alle 10sec?
Ich weiss, dass ich mit AWK oder SED arbeiten muss, aber ich habe garkein Ahnung. C&P (http://www.telefon-treff.de/showthread/t-288521.html)
$Time[10sec...1h]
crontab -l >/tmp/mycrontab
awk '!/check.sh/{print $0} /check.sh/{print "$Time"$0}' /tmp/mycrontab /tmp/mycrontab.fin
crontab /tmp/mycrontab.fin
Per crontab kannst Du eigentlich nur feste Zeiten erledigen. Wenn Du Variable sein willst, mußt Du Dir einen eigenen Deamon schreiben ....
Hallo,
Zitatdas ist debian-spezifisch
Ah ok.
Ich lern ja auch gerne noch dazu ;D
Grüsse