Initskript für BeagleBoard (Systemzeit): Unterschied zwischen den Versionen

Aus FHEMWiki
 
(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:'''
== 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 -&gt; ../ntp
lrwxrwxrwx 1 root root 6 Okt 29 16:58 S05ntp -&gt; ../ntp
lrwxrwxrwx 1 root root 7 Jan 21 18:16 S06cron -&gt; ../cron</nowiki>
lrwxrwxrwx 1 root root 7 Jan 21 18:16 S06cron -&gt; ../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 -&gt; ../ntp</nowiki>
lrwxrwxrwx 1 root root 6 Okt 29 16:58 S05ntp -&gt; ../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:HOWTOS]]
[[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.