Initskript für BeagleBoard (Systemzeit): Unterschied zwischen den Versionen
(→Lösung) |
K (→Lösung) |
||
(5 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
'''Linux Initskript''' | '''Linux Initskript für BeagleBoard xM''' | ||
== Ausgangssituation == | == Ausgangssituation == | ||
Auf einem [[BeagleBoard-xM]], welches keine Real-Time-Clock (RTC) hat, sorgt eine NTP-Abfrage für die genaue Systemzeit. | Auf einem [[:Kategorie:BeagleBoard-xM|BeagleBoard-xM]], welches keine Real-Time-Clock (RTC) hat, sorgt eine NTP-Abfrage für die genaue Systemzeit. | ||
== Problem == | == Problem == | ||
Zeile 12: | Zeile 10: | ||
Kurz darauf, sobald durch das Init-Skript per NTP die Systemzeit auf das richtige Datum (incl. Zeit) gesetzt worden ist, schreibt FHEM die neuen Werte in die richtigen Datums-Log-Dateien. | Kurz darauf, sobald durch das Init-Skript per NTP die Systemzeit auf das richtige Datum (incl. Zeit) gesetzt worden ist, schreibt FHEM die neuen Werte in die richtigen Datums-Log-Dateien. | ||
== Auswirkungen == | |||
* überflüssige physikalische Log-Dateien | * überflüssige physikalische Log-Dateien | ||
* die Anzeige beim Aufruf der FHEM-Seite ''Everything'' wird unnötig aufgebläht und verzögert | * die Anzeige beim Aufruf der FHEM-Seite ''Everything'' wird unnötig aufgebläht und verzögert | ||
* die durch FHEM verursachte Systemlast (load) steigt beim Aufruf von FHEM ''Everything'' teils auf über 95 %. | * die durch FHEM verursachte Systemlast (load) steigt beim Aufruf von FHEM ''Everything'' teils auf über 95 %. | ||
== Ursache == | == Ursache == | ||
FHEM wird (hier) durch die Initskripte '''vor'''dem Aufruf des NTP-Dienstes gestartet. | FHEM wird (hier) durch die Initskripte '''vor''' dem Aufruf des NTP-Dienstes gestartet. | ||
Ob dies auch bei Ihnen so ist, können Sie relativ einfach feststellen. Wichtig ist zunächst festzustellen, in welchem ''runlevel''sich ihr System befindet. Dies sollte zwar der Level ''3''sein, aber wer weiß. Ermitteln Sie also ihren ''runlevel''durch Eingabe des Befehls | Ob dies auch bei Ihnen so ist, können Sie relativ einfach feststellen. Wichtig ist zunächst festzustellen, in welchem ''runlevel'' sich ihr System befindet. Dies sollte zwar der Level ''3'' sein, aber wer weiß. Ermitteln Sie also ihren ''runlevel''durch Eingabe des Befehls | ||
<nowiki># runlevel</nowiki> | <nowiki># runlevel</nowiki> | ||
Zeile 28: | Zeile 24: | ||
<nowiki>N 3</nowiki> | <nowiki>N 3</nowiki> | ||
Nun gehen Sie in das Verzeichnis ''/etc/init.d''(per ''cd /etc/init.d''). Dort sehen Sie bei einem ''ls -l''folgende Informationen (Ausschnitt): | Nun gehen Sie in das Verzeichnis ''/etc/init.d'' (per ''cd /etc/init.d''). Dort sehen Sie bei einem ''ls -l'' folgende Informationen (Ausschnitt): | ||
<nowiki>drwxr-xr-x 2 root root 4096 Okt 29 16:56 rc0.d | <nowiki>drwxr-xr-x 2 root root 4096 Okt 29 16:56 rc0.d | ||
Zeile 38: | Zeile 34: | ||
drwxr-xr-x 2 root root 4096 Okt 29 16:56 rc6.d | drwxr-xr-x 2 root root 4096 Okt 29 16:56 rc6.d | ||
drwxr-xr-x 2 root root 4096 Okt 29 16:58 rcS.d</nowiki> | drwxr-xr-x 2 root root 4096 Okt 29 16:58 rcS.d</nowiki> | ||
Dabei handelt es sich um Initialisierungsverzeichnisse für die verschiedenen ''runlevel''(welcher Dienst soll in welchem level gestartet werden?). | Dabei handelt es sich um Initialisierungsverzeichnisse für die verschiedenen ''runlevel'' (welcher Dienst soll in welchem level gestartet werden?). | ||
Da ich (wie wahrscheinlich auch Sie) den Runlevel 3 (siehe obige Ausgabe "N 3") habe, wechsle ich in das Verzeichnis rc3.d und mache dort ein ''ls -l'': | Da ich (wie wahrscheinlich auch Sie) den Runlevel 3 (siehe obige Ausgabe "N 3") habe, wechsle ich in das Verzeichnis rc3.d und mache dort ein ''ls -l'': | ||
Zeile 64: | Zeile 60: | ||
lrwxrwxrwx 1 root root 6 Okt 29 16:58 S05ntp -> ../ntp | lrwxrwxrwx 1 root root 6 Okt 29 16:58 S05ntp -> ../ntp | ||
lrwxrwxrwx 1 root root 7 Jan 21 18:16 S06cron -> ../cron</nowiki> | lrwxrwxrwx 1 root root 7 Jan 21 18:16 S06cron -> ../cron</nowiki> | ||
Wichtig sind hier die '''S'''tart-Skripte, also die, die mit einem '''S'''beginnen (nebenbei: Die Skripte mit einem vorangestellten ''K''dienen dem Beenden (K für Kill) eines Dienstes). Durch die nachfolgende Zahl wird die Reihenfolge bestimmt, in der die Skripte ausgeführt werden: | Wichtig sind hier die '''S'''tart-Skripte, also die, die mit einem '''S''' beginnen (nebenbei: Die Skripte mit einem vorangestellten ''K'' dienen dem Beenden (K für Kill) eines Dienstes). Durch die nachfolgende Zahl wird die Reihenfolge bestimmt, in der die Skripte ausgeführt werden: | ||
<nowiki>... | <nowiki>... | ||
Zeile 70: | Zeile 66: | ||
... | ... | ||
lrwxrwxrwx 1 root root 6 Okt 29 16:58 S05ntp -> ../ntp</nowiki> | lrwxrwxrwx 1 root root 6 Okt 29 16:58 S05ntp -> ../ntp</nowiki> | ||
Der FHEM-Dienst wird über die Datei ''S02fhem''und NTP über ''S05ntp''gestartet, FHEM in jedem Fall also '''vor'''dem NTP-Dienst. | Der FHEM-Dienst wird über die Datei ''S02fhem'' und NTP über ''S05ntp'' gestartet, FHEM in jedem Fall also '''vor''' dem NTP-Dienst. | ||
== Lösung == | == Lösung == | ||
Zeile 76: | Zeile 72: | ||
<nowiki># mv S02fhem S99fhem</nowiki> | <nowiki># mv S02fhem S99fhem</nowiki> | ||
benennen Sie das Skript (eigentlich nur ein Soft-Link, aber das ist hier unwichtig) jetzt einfach so um, dass es in jedem Fall '''als letztes'''gestartet wird ('''S99'''). | benennen Sie das Skript (eigentlich nur ein Soft-Link, aber das ist hier unwichtig) jetzt einfach so um, dass es in jedem Fall '''als letztes''' gestartet wird ('''S99'''). | ||
Ab dem nächsten Systemstart (Stromausfall) sollten dann keine überflüssigen Log-Dateien mehr angelegt werden. | Ab dem nächsten Systemstart (Stromausfall) sollten dann keine überflüssigen Log-Dateien mehr angelegt werden. | ||
[[Kategorie: | [[Kategorie:Linux Initscript]] | ||
[[Kategorie:BeagleBoard-xM]] |
Aktuelle Version vom 19. Juni 2018, 14:52 Uhr
Linux Initskript für BeagleBoard xM
Ausgangssituation
Auf einem BeagleBoard-xM, welches keine Real-Time-Clock (RTC) hat, sorgt eine NTP-Abfrage für die genaue Systemzeit.
Problem
Dies funktioniert auch soweit, lediglich beim Systemstart kommt es zu Problemen.
Dadurch, das zum Start-Zeitpunkt von FHEM die Systemzeit noch nicht richtig gesetzt ist, wird ein Datum im September 2012gewählt (hier ist jetzt aber aktuell Januar 2013). Dadurch legt FHEM beim Start, sofern die Log-Dateien auf die monatliche Version (in diesem Fall sogar bei der Jahres-Einstellung) eingestellt sind, im Log-Verzeichnis für jedes Device eine zusätzliche Log-Datei mit dem falschen Datum (Monat bzw. Jahr) an.
Kurz darauf, sobald durch das Init-Skript per NTP die Systemzeit auf das richtige Datum (incl. Zeit) gesetzt worden ist, schreibt FHEM die neuen Werte in die richtigen Datums-Log-Dateien.
Auswirkungen
- überflüssige physikalische Log-Dateien
- die Anzeige beim Aufruf der FHEM-Seite Everything wird unnötig aufgebläht und verzögert
- die durch FHEM verursachte Systemlast (load) steigt beim Aufruf von FHEM Everything teils auf über 95 %.
Ursache
FHEM wird (hier) durch die Initskripte vor dem Aufruf des NTP-Dienstes gestartet.
Ob dies auch bei Ihnen so ist, können Sie relativ einfach feststellen. Wichtig ist zunächst festzustellen, in welchem runlevel sich ihr System befindet. Dies sollte zwar der Level 3 sein, aber wer weiß. Ermitteln Sie also ihren runleveldurch Eingabe des Befehls
# runlevel
Ausgabe hier:
N 3
Nun gehen Sie in das Verzeichnis /etc/init.d (per cd /etc/init.d). Dort sehen Sie bei einem ls -l folgende Informationen (Ausschnitt):
drwxr-xr-x 2 root root 4096 Okt 29 16:56 rc0.d drwxr-xr-x 2 root root 4096 Okt 29 16:58 rc1.d drwxr-xr-x 2 root root 4096 Jan 21 18:16 rc2.d drwxr-xr-x 2 root root 4096 Jan 31 20:24 rc3.d drwxr-xr-x 2 root root 4096 Sep 7 20:18 rc4.d drwxr-xr-x 2 root root 4096 Jan 21 18:16 rc5.d drwxr-xr-x 2 root root 4096 Okt 29 16:56 rc6.d drwxr-xr-x 2 root root 4096 Okt 29 16:58 rcS.d
Dabei handelt es sich um Initialisierungsverzeichnisse für die verschiedenen runlevel (welcher Dienst soll in welchem level gestartet werden?).
Da ich (wie wahrscheinlich auch Sie) den Runlevel 3 (siehe obige Ausgabe "N 3") habe, wechsle ich in das Verzeichnis rc3.d und mache dort ein ls -l:
lrwxrwxrwx 1 root root 7 Okt 29 16:58 K01cron -> ../cron lrwxrwxrwx 1 root root 7 Okt 29 16:56 K01dbus -> ../dbus lrwxrwxrwx 1 root root 7 Dez 3 19:57 K01fhem -> ../fhem lrwxrwxrwx 1 root root 16 Okt 29 16:56 K01purge-kernels -> ../purge-kernels lrwxrwxrwx 1 root root 9 Okt 29 16:56 K01random -> ../random lrwxrwxrwx 1 root root 6 Dez 3 19:57 K02kbd -> ../kbd lrwxrwxrwx 1 root root 6 Okt 29 16:58 K02ntp -> ../ntp lrwxrwxrwx 1 root root 19 Okt 29 16:58 K03network-remotefs -> ../network-remotefs lrwxrwxrwx 1 root root 9 Okt 29 16:58 K03syslog -> ../syslog lrwxrwxrwx 1 root root 14 Okt 29 16:58 K04earlysyslog -> ../earlysyslog lrwxrwxrwx 1 root root 10 Okt 29 16:58 K04network -> ../network lrwxrwxrwx 1 root root 6 Okt 29 16:57 S01kbd -> ../kbd lrwxrwxrwx 1 root root 7 Okt 29 16:57 S02dbus -> ../dbus lrwxrwxrwx 1 root root 14 Okt 29 16:58 S02earlysyslog -> ../earlysyslog lrwxrwxrwx 1 root root 16 Okt 29 16:57 S02purge-kernels -> ../purge-kernels lrwxrwxrwx 1 root root 9 Okt 29 16:57 S02random -> ../random lrwxrwxrwx 1 root root 7 Jan 31 20:24 S02fhem -> ../fhem lrwxrwxrwx 1 root root 10 Okt 29 16:58 S03network -> ../network lrwxrwxrwx 1 root root 19 Okt 29 16:58 S04network-remotefs -> ../network-remotefs lrwxrwxrwx 1 root root 9 Okt 29 16:58 S04syslog -> ../syslog lrwxrwxrwx 1 root root 6 Okt 29 16:58 S05ntp -> ../ntp lrwxrwxrwx 1 root root 7 Jan 21 18:16 S06cron -> ../cron
Wichtig sind hier die Start-Skripte, also die, die mit einem S beginnen (nebenbei: Die Skripte mit einem vorangestellten K dienen dem Beenden (K für Kill) eines Dienstes). Durch die nachfolgende Zahl wird die Reihenfolge bestimmt, in der die Skripte ausgeführt werden:
... lrwxrwxrwx 1 root root 7 Jan 31 20:24 S02fhem -> ../fhem ... lrwxrwxrwx 1 root root 6 Okt 29 16:58 S05ntp -> ../ntp
Der FHEM-Dienst wird über die Datei S02fhem und NTP über S05ntp gestartet, FHEM in jedem Fall also vor dem NTP-Dienst.
Lösung
Mittels eines
# mv S02fhem S99fhem
benennen Sie das Skript (eigentlich nur ein Soft-Link, aber das ist hier unwichtig) jetzt einfach so um, dass es in jedem Fall als letztes gestartet wird (S99).
Ab dem nächsten Systemstart (Stromausfall) sollten dann keine überflüssigen Log-Dateien mehr angelegt werden.