Hilfe! Mein FHEM funktioniert nicht!: Unterschied zwischen den Versionen
Zeile 103: | Zeile 103: | ||
Liefert das Kommando nur den grep Befehl zurück, wurden keine weiteren Treffer gefunden - d.h. fhem oder hmland laufen derzeit nicht. | Liefert das Kommando nur den grep Befehl zurück, wurden keine weiteren Treffer gefunden - d.h. fhem oder hmland laufen derzeit nicht. | ||
Ist der Prozeßname bekannt, kann mittels pgrep auch gezielt nach der Prozeß-ID (des laufenden Prozesses) gesucht werden: | |||
pgrep apache2 | |||
zeigt die laufenden Prozeß-IDs, z.B.: | |||
os@fhem:~$ pgrep apache2 | |||
1118 | |||
12459 | |||
12460 | |||
13551 | |||
13552 | |||
13553 | |||
13554 | |||
13555 | |||
Die Prozeß-IDs können genutzt werden, um diese gezielt zu beenden. Dazu wird das blutrünstige Kommando '''kill''' mit der Prozeß-ID als Argument verwendet. So würde | |||
kill 12459 | |||
einen (!) der laufenden Apache2-Prozesse friedlich beenden. Friedlich bedeutet, daß dem Prozess die Möglichkeit gegeben wird, seine offenen Dateien zu schreiben und File-Descriptoren zu schliessen. Nicht immer reagiert jedoch ein Prozeß auf einen kill-Befehl - dann hilft das zusätzliche Argument '''-9''', welches den Prozeß ohne weiteren Möglichkeiten sofort beendet. Dabei kann es zu Datei- und Datenverlust kommen: | |||
kill -9 12459 | |||
Sollen alle Prozesse beendet werden, ist es hilfreich, mit der kleinesten Prozeß-ID anzufangen - mit etwas Glück beendet der Hauptprozeß alle von ihm gestarteten Kind-Prozesse gleich mit. | |||
=== Wie ist die Auslastung des fhem-Servers === | === Wie ist die Auslastung des fhem-Servers === |
Version vom 29. April 2016, 15:30 Uhr
Diese Seite gibt beschreibt die Vorgehensweise bei der Fehlersuche mit fhem auf der Basis von Linux.
Anmelden am fhem-Server
In dieser Hilfeseite läuft fhem auf einem Linux-System, z.B. ein Raspberry Pi, ein ODROID oder ein Beaglebone. Auf diesem Computer läuft eine Variante von Linux für Einplatinencomputer.
Das Linux als Betriebssystem stellt meist einen ssh-Server (ein verschlüsselter Zugang zum System auf der Kommandozeilenebene von einem zweiten Rechner aus) und/oder eine Console (die Anmeldung erfolgt lokal am angeschlossenen Bildschirm und Tastatur) zur Verfügung.
Anmeldung via ssh (OS X/Linux)
Auf einem Mac- oder Linux-Computer wird ein Terminal gestartet (xterm, Terminal) und dort mittels ssh eine Verbindung zum fhem-Server aufgenommen:
ssh <IP-Adresse fhem-Server> -l <useraccount>
hat der fhem-Server z.B. die IP-Adresse 192.168.1.22 und der Useraccount lautet pi lautet der Befehl
ssh 192.168.1.22 -l pi
oder einfacher
ssh pi@192.168.1.22
Sollte die Verbindung erfolgreich hergestellt werden, wird ein Paßwort erbeten. Danach steht die Kommandozeile auf dem fhem-Server zur Verfügung. Nur beim ersten Mal fragt ssh nach, ob der öffentliche Schlüssel des fhem-Servers gespeichert werden soll.
Anmeldung via ssh (Windows)
Windows kommt derzeit ohne ssh-Clienten, dieser muß daher zunächst installiert werden. Ein kostenloses, gutes Programm ist putty. Nach Download, Installation und Aufruf bietet putty eine graphische Oberfläche zur Verwaltung verschiedener ssh-Verbindungen.
Die IP-Adresse des fhem-Servers wird in das Feld Host Name (or IP address) eingegeben. Danach fragt ssh nach einem Benutzernamen (login as: ) und Paßwort.Für Raspberry PI Linux-Distributionen ist der Benutzername im Normallfall pi.
Nach erfolgreicher Eingabe der Informationen steht dann die Kommandozeile des fhem-Servers zur Verfügung und kann zur weiteren Fehlersuche genutzt werden:
Anmeldung an der Console
Sollte das Netzwerk des fhem-Servers nicht funktionieren oder dieser nicht erreichbar sein, bleibt nur die Anmeldung an der Console. Dazu wird ein Monitor und eine Tastatur am fhem-Server direkt angeschlossen (z.B. am HDMI-Port und am USB-Port).
Im Normalfall ist das Bild zunächst schwarz, da der Bildschirmschoner von Linux die Ausgabe deaktiviert. Mehrfaches drücken der Leertaste sollte eine Ausgabe im klassischen 80x25-Zeichenmodus oder in einer graphischen Oberfläche anzeigen.
Linux bietet mehrere virtuelle Consolen. Diese lassen sich mit
CTRL-ALT-F1 CTRL-ALT-F2
usw. bis zu
CTRL-ALT-F6
wechseln. Auf der ersten Console (CTRL-ALT-F1) stehen meist interessante Ausgaben wie Logfiles oder Fehlermeldungen. Auf der 7. Console (CTRL-ALT-F7) läuft meist die graphische Oberfläche.
Für eine Fehlersuche wird eine Textconsole (CTRL-ALT-F2 bis CTRL-ALT-F6) empfohlen. An dieser kann sich mit Username und Paßwort angemeldet werden und danach steht eine Kommandozeile zur Verfügung.
root-Berechtigung erlangen
Nicht alle Befehle unter Linux sind für normale Benutzer (wie Anwender oder der pi-Benutzer) zugänglich oder können aufgerufen werden. Systemnahe Befehle, d.h. Befehle, die in die Grundfunktionen des Betriebssystemes konfigurieren oder umstellen, sind nur für den Nutzer root zugänglich.
root-Rechte erlangt man mit den Befehlen
sudo -i
oder
su -
je nach verwendeter Linux-Distribution.
Doch Vorsicht: Linux geht davon aus, daß der Anwender root sehr genau weiß, was er tut. Befehle werden ohne weitere Sicherheitsabfragen ausgeführt - auch die Formatierung der Speicherkarte, externer Laufwerke oder die Löschung aller Dateien. Es ist sehr einfach, durch ein Leerzeichen zuviel oder eines zu wenig einen großen Datenverlust zu erzeugen.
Aus diesem Grund wird dringend empfohlen, die ersten Analyseschritte nur als normaler Anwender (z.B. pi) zu erledigen und wenn der Fehler gefunden wurde, die Behebung mit sudo vorzunehmen. sudo verleiht nur temporär root-Rechte und erfordert für jedes Kommando die explizite Angabe von sudo.
Ein Beispiel: ein normaler User kann
rm -rf /usr/*
nicht aufrufen. Dieser Befehl löscht alle Dateien im /usr-Verzeichnis, dort liegen die existenziell notwendigen Befehle für Linux. Nach Aufruf dieses Befehls ist die Linuxinstallation unwiderruflich defekt.
Der Nutzer root kann denselben Befehl ohne Sicherheitsabfrage aufrufen.
Der Nutzer pi kann den Befehl mit temporären root-Rechten
sudo rm -rf /usr/*
aufrufen und benötigt für den Aufruf sein Paßwort.
Der erste Überblick
Nach erfolgreichem Anmelden an den fhem-Server wird sich zunächst ein Überblick verschafft. Dazu werden die Befehle pstree, ps und pgrep verwendet.
Läuft fhem bereits/noch
Dies läßt sich mit der Befehlskombination
ps auxwww | grep fhem
ermitteln. Dies gibt alle laufenden Prozesse mitsamt ihren Aufrufparametern aus, die fhem im Namen haben. Das Ergebnis sollte in etwa so aussehen:
os@fhem:~$ ps auxwww | grep fhem root 950 0.0 0.0 11364 804 ? Sl Apr13 8:36 /opt/fhem/hmland -d -l 127.0.0.1 -p 54321 root 10972 1.9 2.5 57188 53476 ? S Apr20 237:10 perl fhem.pl fhem.cfg os 18793 0.0 0.0 1700 564 pts/0 S+ 11:52 0:00 grep fhem
Hier sind drei Prozesse zu finden:
- fhem selbst (der Befehl perl fhem.pl fhem.cfg) mit seinen Parametern
- hmland - ein Prozeß, der den Homematic USB-Konfigurationsstick ansteuert
- grep fhem dies ist der Prozeß, der gerade auf der Kommandozeile zur Suche eingegeben wurde
Weiterhin ist ersichtlich: fhem läuft seit dem 20. April (9. Spalte) mit der Prozeß-ID 10972 (2. Spalte) mit root-Rechten (1. Spalte) und hat 237 Minuten und 10 Sekunden CPU-Zeit (10. Spalte) verbraucht, hmland läuft seit dem 13. April und hat 8 Minuten 36 Sekunden CPU-Zeit verbraucht.
Liefert das Kommando nur den grep Befehl zurück, wurden keine weiteren Treffer gefunden - d.h. fhem oder hmland laufen derzeit nicht.
Ist der Prozeßname bekannt, kann mittels pgrep auch gezielt nach der Prozeß-ID (des laufenden Prozesses) gesucht werden:
pgrep apache2
zeigt die laufenden Prozeß-IDs, z.B.:
os@fhem:~$ pgrep apache2 1118 12459 12460 13551 13552 13553 13554 13555
Die Prozeß-IDs können genutzt werden, um diese gezielt zu beenden. Dazu wird das blutrünstige Kommando kill mit der Prozeß-ID als Argument verwendet. So würde
kill 12459
einen (!) der laufenden Apache2-Prozesse friedlich beenden. Friedlich bedeutet, daß dem Prozess die Möglichkeit gegeben wird, seine offenen Dateien zu schreiben und File-Descriptoren zu schliessen. Nicht immer reagiert jedoch ein Prozeß auf einen kill-Befehl - dann hilft das zusätzliche Argument -9, welches den Prozeß ohne weiteren Möglichkeiten sofort beendet. Dabei kann es zu Datei- und Datenverlust kommen:
kill -9 12459
Sollen alle Prozesse beendet werden, ist es hilfreich, mit der kleinesten Prozeß-ID anzufangen - mit etwas Glück beendet der Hauptprozeß alle von ihm gestarteten Kind-Prozesse gleich mit.
Wie ist die Auslastung des fhem-Servers
Zur Ermittlung der Auslastung können die Befehle top und uptime verwendet werden. top wird dabei alle zwei Sekunden die Ausgabe aktualisieren und die Prozesse anzeigen, die gerade viel CPU-Zeit verbrennen, während uptime einmalig die Werte ausgibt:
os@fhem:~$ uptime 11:58:10 up 15 days, 16:33, 2 users, load average: 0.09, 0.08, 0.12
Die Load Average wird in drei Werten angezeigt: 1-Minuten-Mittel, 5-Minuten-Mittel und 15-Minuten-Mittel. Eine Load von 1.0 indiziert das ein CPU-Kern zu 100% ausgelastet ist - kein sehr erstrebenswerter Zustand. In Abhängigkeit von der Hardware-Ausstattung des fhem-Servers sollte die 15-Minuten-Load immer unter 1.0 (z.B. Raspberry Pi A), immer unter 2.0 (Raspberry Pi B), immer unter 4.0 (ODROID U3 oder besser) liegen. Im Normalfall ist eine hohe Load etwas schlechtes, da das System langsam wird und schlecht reagiert.
Partitionen
Ein Linux-System verwendet in seinem Dateibaum (dieser startet mit /, der Wurzel) viele Unterverzeichnisse mit speziellen Aufgaben. Manche Unterverzeichnisse werden in Festplattenbereiche ausgelagert (eine Partition) oder im RAM abgebildet. Ein Überblick ist mit dem Befehl mount zu erhalten:
os@fhem:~$ mount /dev/mmcblk0p2 on / type ext4 (rw) proc on /proc type proc (rw,noexec,nosuid,nodev) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev) sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) none on /sys/fs/cgroup type tmpfs (rw) none on /sys/kernel/debug type debugfs (rw) udev on /dev type devtmpfs (rw,mode=0755) devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620) tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755) none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880) none on /run/shm type tmpfs (rw,nosuid,nodev) none on /run/user type tmpfs (rw,noexec,nosuid,nodev,size=104857600,mode=0755) /dev/mmcblk0p1 on /media/boot type vfat (rw) systemd on /sys/fs/cgroup/systemd type cgroup (rw,noexec,nosuid,nodev,none,name=systemd)
Hier sind die Unterverzeichnisse wie /, /proc, /run, /dev usw. zu sehen, die verwendeten Dateisysteme (ext4, sysfs, tmpfs, devpts, vfat) und spezielle Berechtigungen (der Teil in den Klammern).
Nur Daten, die in Partitionen mit Dateisystemen ext2, ext3, ext4, vfat, fat oder exfat gespeichert werden, stehen nach einem Neustart wieder zur Verfügung. Partitionen mit den Dateisystemen tmpfs, devpts, sysfs werden beim Neustart neu angelegt und verlieren ihren Inhalt.