Seit einiger Zeit lasse ich mir von meinen Raspis (alle auf Version IPS5.0 aber unterschiedliche Hardware) die Startzeitpunkte von Linux und IPS an den zentralen Wndows-PC melden.
Auf den Raspis wird jede Minute ein Skript aufgerufen, das Temperatur, Speicher usw. ermittelt und zum Thema folgendes abfragt:
case 'Uptime':
$Wert = shell_exec ("awk '{print $1}' /proc/uptime");
$Wert = round ($Wert, 0);
$Wert = time () - $Wert;
break;
case 'IPStime':
if ((float) IPS_GetKernelVersion () > 4) {
$Wert = IPS_GetKernelStartTime ();
} else {
$Wert = $Liste['Uptime']['Statu']; // für ältere IPS-Versionen mit der Linux-Uptime begnügen
}
break;
Am zentralen PC lasse ich mir dann die Laufzeiten ausrechnen und tabellarisch anzeigen (im Prinzip Wert von time() subtrahiert mit dem übermittelten Laufzeitwert):
$ZSte = time ();
...
foreach ($LAN as $PC_Name => $PC) {
...
switch ($Ablauf):
case 'LastCall':
if (isset ($Liste[$PC_Name]))
@$Spalte[$SpNr + $BoxOffset] = ZeitDauer ($ZSte - $Liste[$PC_Name][$Ablauf]['ZLast']);
break;
case 'Uptime':
case 'IPStime':
if (isset ($Liste[$PC_Name]))
@$Spalte[$SpNr + $BoxOffset] = ZeitDauer ($ZSte - $Liste[$PC_Name][$Ablauf]['aWert']);
break;
...
(ZeitDauer ist eine eigene Funktion zur Visualisierung, unter LastCall liste ich den Zeitabstand zur letzten Meldung).
In der Tabelle fällt auf, dass bei einigen Raspis der Wert für die IPS-Laufzeit höher ist, als der der Linux-Laufzeit.
Besonders fällt mir jetzt ein Raspi auf, bei dem ich gestern etwa um diese Zeit die Stromversorgung abgeschaltet habe und dessen IPS-Laufzeit auf ca. 23:52 (dargestellt als hh:mm) steht und den ich am Abend wieder eingeschaltet habe, wobei die Linux-Laufzeit auf ca. 15:57 steht.
Kann es sein, dass IPS zu einem Zeitpunkt seine Startzeit ermittelt, in dem die Zeit aus dem Linux-System noch nicht stabil ist und die Funktion IPS_GetKernelStartTime deshalb permanent den Zeitpunkt vor Verlust der Stromversorgung angibt ??
(Komplizierte Frage zum Sonntagmorgen und nicht besonders wichtig aber halt auffällig)
Nach ca. 3 Sekunden immer noch keine Zeitsyschoronisierung, ist ja für einen Prozessor, der (z.Z.) mit 600 MHz läuft eine halbe Ewigkeit
Aber dann nach der 4ten Sekunde nach Start:
...
10.11.2018 10:17:08 | 33694 | MESSAGE | Event Control | Start-Skript ausgeführt!
10.11.2018 10:17:08 | 49499 | ERROR | ScriptEngine | Ergebnis für Skript 49499
Nicht vorgesehenes RunScript von 15774 Events\IPS-Start
10.11.2018 18:14:44 | 42931 | WARNING | ScriptEngine | Ergebnis für Ereignis 55953
Scheduler ist ausgefallen!!
lief zuletzt : Sa 10.11.18-10:30:10 mit
Sa 10.11.18-10:31:00 Scheduler (EVT:Starte Skripte)
Sa 10.11.18-10:40:00 HB10min (HB:HB 10min)
Sa 10.11.18-11:00:00 HB1h (HB:HB 1h)
war vorgesehen für: Sa 10.11.18-18:15:00,
Scheduler wird jetzt neu gestartet!
10.11.2018 18:15:27 | 56801 | MESSAGE | Client Socket | Einstellungen gespeichert
...
Ich bau mir eine Routine ein, die evtl. die Linux-Startup-Time verwendet.
Möchte ja nicht „den Pi zwingen zu warten, bis die Zeit per NTP verfügbar ist“. Und auch nicht IPS zwingen zu warten.
In der IPS-Doku sollte für Funktion IPS_GetKernelStartTime ein Hinweis auf die evtl. verzögerte Zeit-Synchronosierung stehen und dass in solchen Fällen das Resultat nicht korrekt ist.