fhem überwachen (watchdog)

Begonnen von Elektrolurch, 05 Juli 2014, 10:08:26

Vorheriges Thema - Nächstes Thema

igami

Zitat von: heiko.ne am 10 März 2016, 09:04:45
mit Bezug auf den eigentlichen ursprünglichen Lösungsvorschlag von Elektrolurch möchte ich meine Umsetzung für den Einsatz bei FHEM auf einem RaspberryPi, die nur mit wenigen Anpassungen an das was Elektrolurch genannt hat, im erfolgreichen Einsatz ist, präsentieren:
[...]
Vielen Dank an Dich für Arbeit. Nach einigem Probieren konnte ich Deine Lösung für mein System nutzen. Läuft jetzt perfekt.

Habe das eben auch bei mir so umgestzt, da mein FHEM nach einem Neustart aus der Ferne nicht wieder auf die Beine kam.
Vielen Dank euch.

Grüße
igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Amenophis86

#31
Zitat von: gandy am 02 Oktober 2014, 12:23:30
check process fhem with pidfile /var/run/fhem.pid
   start program = "/etc/init.d/fhem start"
   stop  program = "/etc/init.d/fhem stop"
   if failed host localhost port 7072 with send "knock\n" expect "hello." timeout 20 seconds then restart
   if 5 restarts with 5 cycles then timeout


Ich habe eine Frage hierzu. Habe es jetzt auch so ähnlich umgesetzt. Ich hätte gerne noch, dass Monit mich vorher informieren soll. Einmal soll es mich informieren, wenn der Prozess neugestartet wird und einmal, wenn es hängt und vermutlich gleich neu gestartet wird. Habe mir das so vorgestellt:
check process fhem with pidfile /var/run/fhem/fhem.pid
   if start exec /opt/fhem/monitpush2.sh   <----------- Fantasie Code, da ich keine Ahnung habe, ob es einen solchen Befehl gibt
   start program = "/etc/init.d/fhem start"
   stop  program = "/etc/init.d/fhem stop"
   if failed host localhost port 7072 with send "knock\n" expect "hello." timeout 60 seconds then exec /opt/fhem/monitpush.sh
   if failed host localhost port 7072 with send "knock\n" expect "hello." timeout 120 seconds then restart
   if 5 restarts with 5 cycles then timeout


Gibt es einen Code, der dem oben entspricht? Die zweite Variante mit monitpush.sh nach 60 Sekunden müsste klappen, aber gibt es auch etwas für die erst Variante??
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

HansDampfHH

#32
edit: Erledigt. Habe das nun auch mit monit umgesetzt !

Hallo, ich wollte auch gerade die Umsetzung für das Überwachen des FHEM Prozesses vornehmen.
Vielleicht hat jemand einen Hinweis für nachfolgende Fehlermeldung in meinem Log nach 'shutdown restart':


fhem_not return value: -1
trap: SIGHUP: bad trap
modprobe: ERROR: could not insert 'cdc_acm': Operation not permitted
ln: das Entfernen von ,,/var/fhemcmd" ist nicht möglich: Keine Berechtigung


Bei /var/fhemcmd vielleicht noch die Berechtigung auf fhem:dialout setzen?

Wäre für einen Hinweis dankbar.
FHEM Docker, CUL868, Zigbee, CCU2, Jeelink

ChrisW

#33
Zitat von: heiko.ne am 10 März 2016, 09:04:45
Hallo,
mit Bezug auf den eigentlichen ursprünglichen Lösungsvorschlag von Elektrolurch möchte ich meine Umsetzung für den Einsatz bei FHEM auf einem RaspberryPi, die nur mit wenigen Anpassungen an das was Elektrolurch genannt hat, im erfolgreichen Einsatz ist, präsentieren:

1. Diese beiden Devices anlegen:

define Watchdog_exec at +*00:10:00 {Wd_exec()}
define fhem_not notify global:INITIALIZED|REREADCFG {fhem_not()}


2. "99_myUtils.pm" um folgendes ergänzen:

sub fhem_not()
{
Wd_exec();
# alte watchdogs vorsichtshalber löschen
my $ret = `ps | grep watchdog.pl`;
my @lines = split("\n",$ret);
my @retval;
foreach my $l (@lines)
{
if($l =~m/.*perl watchdog.pl.*/)
{
my ($wpid) = split(' ',$l);
push(@retval,"killed: ".$l);
$l = `kill -9 $wpid`;
} # if watchdog
} # end foreach
Log(1,join("\n",@retval));
# und neu starten

system("./startwatchdog&");
} # end sub fhem_not

sub Wd_exec()
{
my $filename = ">./watchdog.log";
my $pid = getpid();
if (open (WATCHDOGFILE,$filename))
{
printf (WATCHDOGFILE "%d\t%d\n%s",time(),$pid,TimeNow());
close WATCHDOGFILE;
}
return undef;
} # end sub Wd_exec


3. Im Ordner \opt\fhem die beiden folgenden Dateien anlegen:

A. "startwatchdog"

#!/bin/sh

home=/opt/fhem

cd $home

trap "" SIGHUP
modprobe cdc_acm
modprobe ftdi_sio
sleep 2

ln -sf $home/FHEM/fhemcmd.sh /var/fhemcmd

PATH=$home:$PATH
export PATH

export LD_LIBRARY_PATH=$home/lib
export PERL5LIB=$home/lib/perl5/site_perl/5.12.2/mips-linux:$home/lib/perl5/site_perl/5.12.2:$home/lib/perl5/5.12.2/mips-linux:$home/lib/perl5/5.12.2

perl ./watchdog.pl


B. "watchdog.pl"

#!/usr/bin/perl

use strict;
use warnings;
use Time::HiRes qw(gettimeofday);

# Main Loop
while(1)
{
my $cycle = 600;
sleep 30;
my $restart = 1;
my $filename = "./watchdog.log";
my ($lt,$pid);
$pid = 0;

if (open (WATCHDOGFILE,$filename))
{
while (<WATCHDOGFILE>)
{
chomp ;
($lt,$pid) = split("\t",$_);
my $diff = time() - $lt;
if($diff <= $cycle)
{
$restart = 0;
}
last;

} # while  reading
close WATCHDOGFILE;
}
if($restart)
{
my $ret = `kill -9 $pid` if($pid);
printf("Watchdog: kill hanging fhem pid=%d: %s\n",$pid, $ret);
exec("/etc/init.d/fhem start");
} # restart
sleep ($cycle - 30);
} # while main loop
1;


Hinweis: Man muss daran denken, für beide Skripte das Ausführen für alle Benutzer zuzulassen:
chmod 755 watchdog.pl
chmod 755 startwatchdog


4. Testen

Wenn man ein "shutdown restart" durchführt, sollten nun zwei weitere Prozesse des Benutzers "fhem" vorhanden sein:

- perl ./watchdog.pl
- /bin/sh ./startwatchdog

Würgt man jetzt den eigentlichen Prozess "perl fhem.pl fhem.cfg" ab, dann sollte er nach einiger Zeit wieder durch den Watchdog erscheinen.

5. Dank an Elektrolurch

Vielen Dank an Dich für Arbeit. Nach einigem Probieren konnte ich Deine Lösung für mein System nutzen. Läuft jetzt perfekt.

Gruß
Heiko

Bekomme das hier im Log:
sh: 1: ./startwatchdog: not found


Hab es auch mal angepasst bzw die Dateien wo anders hin kopiert. habe immer das selbe im Log :(
Raspberry PI3 mit allem möglichen.

Elektrolurch

Hallo,

mittlerweile habe ich das auch auf monit umgestellt.
Allerdings sind 60 s recht knapp. Da kann es schon passieren, dass die USB-Ports noch belegt sind und dann die CULs auf disconnect stehen. Daher hat sich in der Praxis 120 s bewährt.

Elektrolurch
configDB und Windows befreite Zone!

Invers

#35
Aus gegebenem Anlass versuche ich auch gerade den Watchdog einzurichten.
Ich bekomme nach dem Neustart von fhem folgende Meldung im log:

2016.11.16 00:52:55 3: fhem_not return value: -1
trap: SIGHUP: bad trap
modprobe: ERROR: could not insert 'ftdi_sio': Operation not permitted
ln: failed to create symbolic link '/var/fhemcmd': Permission denied


Über Putty erhalte ich folgende Meldung:

pi@raspberrypi:/opt/fhem $ ./startwatchdog
trap: SIGHUP: bad trap
modprobe: ERROR: could not insert 'ftdi_sio': Operation not permitted
ln: failed to create symbolic link '/var/fhemcmd': Permission denied



Mit sudo erhalte ich die Meldung
pi@raspberrypi:/opt/fhem $ sudo ./startwatchdog
trap: SIGHUP: bad trap


Der Prompt kommt aber nicht zurück, erst wenn ich mit STRG+C unterbreche.


Die Dateien startwatchdog und watchdog.pl habe ich mit 755 und fhem:dialout angepasst.

Hat wer ne Idee?


EDIT:

Hat sich erst einmal erledigt. Ich habe die Lösung von Betateilchen installiert, klappte auf Anhieb. Danke dafür.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

doesel

ZitatHat sich erst einmal erledigt. Ich habe die Lösung von Betateilchen installiert, klappte auf Anhieb. Danke dafür.
Wo find ich denn die?
Doesel
(FHEM auf Cubietruck mit Igor-Image, 64GB SSD), seit März 19 FHEM auf NUC im Proxmox-Container, 240GB SSD, div. Homematic, Max Fensterkontakte, Onewire über Firmata und FHEM2FHEM auf Raspberrys, MySensors, Jeelink-Clone mit GSD-Modul, CUL, SDM220Modbus, Logo!8, WS980WiFi

kumue


Invers

Richtig. Aber unter Jessie gibt es Besonderheiten zu beachten. Ich habe schon um Ergänzung gebeten.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Marlen

Hi Ihr,

hab das auch mal versucht einzurichten...habe auch diesen Fehler:

trap: SIGHUP: bad trap
modprobe: ERROR: could not insert 'cdc_acm': Operation not permitted
ln: failed to create symbolic link '/var/fhemcmd': Permission denied


Kann jemand sagen woran das liegt?

LG
  Malren

micky0867

Das liegt vermutlich an fehlenden Rechten.
Hast du das als root gemacht?

Gesendet von meinem ONEPLUS A3003 mit Tapatalk


Marlen


Marlen

O.k. hab die Dateien nochmal als root angelegt.

Allerdings liefert das:
Test:
Hat man alles eingerichtet, so kann man wie folgt testen:
1. Mit telnet sich anmelden.
2. Ins fhem - Verzeichnis wechseln.
3. ps | grep fhem
zeigt die ProzessID (pid) von ./startfhem an.


Also wenn ich "ps | grep fhem" eingebe passiert nix.

Was mach ich denn jetzt wieder falsch?

LG
  Marlen

micky0867

Probier mal

ps -ef | grep fhem



Gesendet von meinem ONEPLUS A3003 mit Tapatalk


Marlen

Aha...

fhem     32581     1  5 22:26 ?        00:01:37 perl fhem.pl fhem.cfg
fhem     32588     1  0 22:27 ?        00:00:00 /bin/sh ./startwatchdog
fhem     32596 32588  0 22:27 ?        00:00:00 perl ./watchdog.pl


Hab das jetzt die pid mit sudo service fhem status
auch heraus bekommen.

DANKE!

:-* Marlen