FritzBox INFO LED zeigt FHEM Status an

Begonnen von Rantanplan, 29 Januar 2014, 17:11:33

Vorheriges Thema - Nächstes Thema

Rantanplan

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!!! ::)

Wernieman

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.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Rantanplan

#2
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

Wernieman

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?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Rantanplan

#4
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.

Rantanplan

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...

Wernieman

#6
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 ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Rantanplan

#7
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?

Wernieman

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
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Rantanplan

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

Wernieman

O.K. scheinbar kapselt die Fritzbox doppelt ..deshalb funktioniert der "Trick" nicht

man beachte: "{busybox}"
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Wernieman

<Klugscheißermodus>
Auf meinem gentoo-System (Linux!) funktioniert ein apt-get auch nicht, das ist debian-spezifisch
</Klugscheißermodus>
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Rantanplan

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

$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

Wernieman

Per crontab kannst Du eigentlich nur feste Zeiten erledigen. Wenn Du Variable sein willst, mußt Du Dir einen eigenen Deamon schreiben ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html