Wie fhem starten, damit ein PID File erzeugt wird?

Begonnen von Mitch, 18 Dezember 2014, 10:25:15

Vorheriges Thema - Nächstes Thema

Mitch

Hallo Zusammen,

ich nutze monit, um ein paar Dinge zu überwachen.

Jetzt würde ich gerne auch fhem mit rein packen.
Leider gibt es ja für fhem kein PID File, auf das monit zugreifen kann.

Wie kann man dieses beim Aufruf erstellen lassen?

PS: auf den Prozess Perl track ich gerade schon über den namen, da habe ich aber das Problem, dass ich zwei Perl Prozesse am laufen habe.
FHEM im Proxmox Container

betateilchen

Wann wirst Du endlich anfangen, die commandref zu lesen? Darin sind 90% aller von Dir hier im Forum gestellten Grundsatzfragen beantwortet. Auch die Frage nach dem pidfile.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Mitch

Danke, und ja, ich sollte vorher immer lesen.

Aber meist verstehe ich dummer User die Dinge im Commanref erst gar nicht.
Und Du musst ja nicht helfen!

Im Commanref steht als Global-Attribut pidfilename, allerdings nicht, ob das mit 1 aktiviert wird, ob ich den Pfad angeben muss, etc.
Vielen Dank für eine Unterstützung.
FHEM im Proxmox Container

fiedel

Hi,

ich lese das gerade und habe auch mal geguckt: In der Commanref finde ich auch "pidfilename": "/var/run/fhem.pid".
Also würde ich es mal mit "attr global pidfilename /var/run/fhem.pid" probieren. Denn es heißt ja pidfilename und nicht pidfile, wo man über "1/0" nachdenken könnte.

Gruß

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Mitch

Es könnte auch heissen PID Fule ein oder aus / enable oder disable / 1 oder 0

Aber ich habe es mitlerweile gefunden, nur wenn ich es aktiviere, fährt fhem nicht mehr hoch
FHEM im Proxmox Container

Ralf W.

Auszug Monit CONFIGURATION EXAMPLES:
Checking process without pidfile (based on pattern):
check process pager matching "/sbin/dynamic_pager -F /private/var/vm/swapfile"

check process fhem matching "/usr/bin/perl fhem.pl fhem.cfg"

MfG
Proxmox Nipogi AM16, FHEM:RaspberryMatic:DE ConBee II, diverse Sensoren und Aktoren.

betateilchen

Zitat von: Mitch am 18 Dezember 2014, 10:52:39
Und Du musst ja nicht helfen!

Stimmt, niemand muss hier helfen. Ich mache das alles hier als Hobby und freiwillig. Aber im Gegensatz zu Dir verliere ich den Unterschied zwischen "jemandem um Hilfe bitten, weil man trotz erkennbarer Bemühungen nicht weiterkommt" und "jemandes Gutmütigkeit ausnützen" nicht aus den Augen.

Aber ich probiers trotzdem nochmal.

Zitat von: Mitch am 18 Dezember 2014, 10:52:39
Aber meist verstehe ich dummer User die Dinge im Commanref erst gar nicht.
...
Im Commanref steht als Global-Attribut pidfilename

Was bitte ist an dem Begriff "filename" unverständlich? Noch dazu, wo doch in der commandref eigentlich unmissverständlich und in Deutsch steht:

pidfilename
Schreibt die PERL Prozess-ID in die angegebene Datei.


Das ist eben kein Schalter, sondern ein Dateiname. Und ob Du einen Pfad angibst oder nicht, ist alleine Dir selbst überlassen.

Zitatnur wenn ich es aktiviere, fährt fhem nicht mehr hoch

Logisch, schau doch mal in Deine Systemkonsole. Ich tippe mit 99,9% Sicherheit darauf, dass fhem schlichtweg keine Schreibrechte hat, die pid-Datei dorthin zu schreiben, wo Du sie gerne haben möchtest. Fehlende Linux Grundlagen, völlig unabhängig von fhem.




Attribut pidfilename für Dummies


  • Auf der Systemkonsole als root: "mkdir -p /var/run/fhem"
  • Auf der Systemkonsole als root: "chown -R fhem:root /var/run/fhem"
  • in fhem: attr global pidfilename /var/run/fhem/fhem.pid
  • in fhem: save config
  • in fhem: shutdown restart

Danach sollte Dein fhem neu starten und Du solltest in der Datei /var/run/fhem/fhem.pid die Prozess-Id finden.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Mitch

Ich danke euch und besonders Betateilchen.

ZitatAttribut pidfilename für Dummies

Auf der Systemkonsole als root: "mkdir -p /var/run/fhem"
Auf der Systemkonsole als root: "chown -R fhem:root /var/run/fhem"
in fhem: attr global pidfilename /var/run/fhem/fhem.pid
in fhem: save config
in fhem: shutdown restart

Und genau so habe ich es gemacht, da ein paar rudimentäre Linuxkenntnisse vorhanden sind  ;)

Im Moment behelfe ich mir mit monit mit folgenden zwei Definitionen:

check process perl
       matching "perl"
       start program = "/opt/fhem/fhemstart.sh"
       stop program = "/opt/fhem/fhemstop.sh"
       if cpu usage > 95% for 10 cycles then restart

check process fhem
        matching "perl fhem.pl configDB"
        start program = "service fhem start"
        stop program = "service fhem stop"
        if failed host localhost port 7070 with send "knock\n" expect "hello." timeout 20 seconds then restart
        if 5 restarts with 5 cycles then timeout


Der Nachteil ist nur, dass systembedingt von Zeit zu Zeit ein zweiter Perl Prozess startet und Monat dadurch ins "Schleudern" kommt.

Im Prinzip will ich mich gegen den Fehler "absichern"; dass Perl auf 100% CPU läuft und damit hem steht.
FHEM im Proxmox Container

betateilchen

Die von mir oben gepostete Anleitung funktioniert einwandfrei. Ich habe sie extra VOR dem Posten auf einem meiner beiden RaspberryPi Entwicklungssysteme getestet.


udo@fhem-dev ~ $ ls -al /var/run/fhem
insgesamt 4
drwxr-xr-x  2 fhem root     60 Dez 18 19:34 .
drwxr-xr-x 16 root root    800 Dez 18 19:43 ..
-rw-r--r--  1 fhem dialout   6 Dez 18 19:34 fhem.pid

udo@fhem-dev ~ $ cat /var/run/fhem/fhem.pid
29517


-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Was hast Du denn beim attribut tatsächlich eingetragen?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Mitch

Ich hatte attr global /var/run/fhem.pid eingetragen.

Dies hatte dazu geführt, dass fhem nicht mehr hochkam.
Witzigerweiße lief der Prozess (perl fhem.pl configDB) und ps ax hat ihn angezeigt, allerdings wurde FHEMweb wohl nicht geladen.

Ich habe gestern dann, auch wegen meinen anderen Problemen (http://forum.fhem.de/index.php/topic,30551.0.html) angefangen, die Files aus der Datenbank zurück zu holen:
1. Export aller Files aus der configDB
2. attr global configfile fhem.cfg, save config, shutdown restart (fhem kam ohne Problem mit ein paar Warnungen hoch)
3. attr global configfile configDB, save config, shutdown restart (fhem kam ohne Probleme mit ein paar Warnungen hoch)

Nun war diese Nacht die erste seit Tagen (Wochen), wo fhem nicht abgestürzt ist.
Ob es so bleibt, kann ich noch nicht sagen.

Den Zusammenhang kann ich (asl Laie) nicht nachvollziehen.
Lag es daran, dass ich die Files aus der DB geholt habe?

Ich werde nun weiter auf configDB beleiben und sehen, wie stabil fhem nun läuft.
FHEM im Proxmox Container

betateilchen

Zitat von: Mitch am 19 Dezember 2014, 09:13:08
Ich hatte attr global /var/run/fhem.pid eingetragen.

Dies hatte dazu geführt, dass fhem nicht mehr hochkam.

Das ist doch völlig logisch. Und Du hast definitiv nicht das gleiche gemacht, was in meiner Anleitung steht! Auch wenn Du felsenfest das Gegenteil behauptest. In meiner Anleitung wird das pidfile nämlich im Verzeichnis /var/run/fhem angelegt und eben nicht in /var/run.

Der Hintergrund ist doch ganz simpel: fhem hat keine Berechtigung, direkt in /var/run zu schreiben. Deshalb wird in meiner Anleitung das Verzeichnis (!) fhem in /var/run angelegt und der Eigentümer auf fhem gesetzt. In dieses Verzeichnis darf fhem jederzeit schreiben. Das pidfile wird ja bei jedem fhem-Start angelegt und bei einem shutdown wieder gelöscht. (siehe commandref!) Deshalb funktioniert das Ganze nur mit einem Verzeichnis, in dem fhem die entsprechenden Rechte hat.

Und dafür, dass Du wieder einmal nicht richtig gelesen hast (in diesem Fall die Anleitung) muss ich mich hier auch noch permanent von Dir vollmaulen lassen. Und erzähl mir bitte nix mehr von Deinen angeblich vorhandenen Linux-Grundlagenkenntnissen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Mitch

Ich maule hier niemanden an, ich werde nur von Dir angemault!!
Und das machst Du ja sehr gerne und ständig bei vielen Leuten!!
Keine Art, aber gut, jeder wie er meint.

Und mein fhem läuft als root und hat root Rechte und kann ohne Passwort alles ausführen, also hat es sehrwohl das Recht auf /var/run zuzugreifen.

Aber egal, ich bin durch.
FHEM im Proxmox Container

betateilchen

Zitat von: Mitch am 19 Dezember 2014, 09:39:40
Und mein fhem läuft als root und hat root Rechte und kann ohne Passwort alles ausführen

Und auch diese Behauptung könnte man auf Deinem System höchstwahrscheinlich widerlegen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Mitch

schön das du das kannst...

Ich will und muss mich hier nicht rechtfertigen!

Aber falls es hier jemand interesseirt, hier der user fhem:
uid=999(fhem) gid=20(dialout) Gruppen=20(dialout),0(root),4(adm),27(sudo),29(audio),124(sambashare)


Zusätzlich in sudoers eingetragen:
fhem    ALL = NOPASSWD:ALL
damit fhem ohne Passwort Befehle ausführen kann (brauche ich für den hci lescan)
FHEM im Proxmox Container