Opennet Firmware
 Alle Dateien Funktionen Variablen Gruppen Seiten
log_restart_timestamp
gehe zur Dokumentation dieser Datei
1 #!/bin/sh
2 #
3 # Sorge dafuer, dass nach einem Boot-Vorgang ein passender Log-Eintrag in
4 # die Banner-Datei geschrieben wird.
5 # Vor dem Schreiben des Zeitstempels wird geprueft, ob die aktuelle Systemzeit
6 # mit der Zeit der konfigurierten Zeitserver grob uebereinstimmt. Falls dies
7 # nicht der Fall ist, wird der Log-Vorgang verschoben, bis eine maximale
8 # Wartezeit ueberschritten ist. Anschliessend erfolgt die Ausgabe mit einem
9 # passenden Text ("no time retrieved").
10 #
11 # Falls die maximal zulässige Zeit noch nicht abgelaufen ist, wird eine erneute
12 # Ausführung via 'schedule_task' veranlasst.
13 
14 . "${IPKG_INSTROOT:-}/usr/lib/opennet/on-helper.sh"
15 
16 
17 MAX_UPTIME_SECONDS=360
18 ACCEPTABLE_TIME_OFFSET=180
19 
20 
21 get_current_time_offset_milliseconds() {
22  local peer_args=
23  local peer
24  local offsets
25  # Die Liste der konfigurierten Zeitserver auslesen und als Argumente fuer ntpd zusammensetzen.
26  for peer in $(uci_get_list system.ntp.server); do
27  [ -z "$peer" ] || peer_args="$peer_args -p $peer"
28  done
29  [ -z "$peer_args" ] && return 0
30  # Alle konfigurierten Zeitserver abfragen.
31  # Wir sind lediglich am "offset"-Wert interessiert.
32  offsets=$(timeout -s INT 4 ntpd -w -n -q $peer_args 2>&1 \
33  | grep "offset:" \
34  | cut -f 4 -d : \
35  | cut -f 1 -d " ")
36  # Keine Zeitserver erreichbar? Abbruch ...
37  [ -z "$offsets" ] && return 0
38  # Durchschnitt der Offsets ermitteln.
39  echo "$offsets" | awk '
40  BEGIN { summe=0; zaehler=1; }
41  { summe+=$1; zaehler+=1; }
42  END { print int((summe * 1000) / zaehler) }'
43 }
44 
45 
46 # Uptime und Zeitsynchronitaet ermitteln
47 time_offset=$(get_current_time_offset_milliseconds)
48 uptime=$(get_uptime_seconds)
49 # beide Bedingungen voneinander trennen - sonst liefert ash eine Fehlermeldung, falls "time_offset" leer ist
50 if [ -z "$time_offset" ] || [ "$time_offset" -gt "$ACCEPTABLE_TIME_OFFSET" ]; then
51  # bisher fand kein Zeitabgleich statt - wir pruefen, ob die uptime inzwischen abgelaufen ist
52  # Ist die maximale Uptime abgelaufen? Falls nicht, dann warten wir auf den naechsten Versuch.
53  [ "$uptime" -lt "$MAX_UPTIME_SECONDS" ] && echo "$0" | schedule_task && exit 0
54  # Die Zeit ist um - wir schreiben den ungueltigen Zeitstempel.
55  timestamp="(no time retrieved)"
56 else
57  # unsere Zeit ist synchronisert - wir koennen das reboot-Log schreiben
58  # Ziehe von der aktuellen Zeit die uptime ab
59  boot_time=$(($(date +%s) - uptime))
60  timestamp=$(date --date "@$boot_time")
61 fi
62 
63 # Schreibe den Zeitstempel
64 add_banner_event "system restart" "$timestamp"
65 # wir sind fertig
add_banner_event(event, timestamp)
Füge ein Ereignis zum dauerhaften Ereignisprotokoll (/etc/banner) hinzu.
Definition: core.sh:68
uci_get_list(uci_path)
Liefere alle einzelenen Elemente einer UCI-Liste zurück.
Definition: uci.sh:15
set eu on function print_services services log for dir in etc on services d var on services volatile d
Definition: services:13
done
Definition: core.sh:81