[Problem] FB 7270 und 7490 vergessen TimeString

chilango79

Aktives Mitglied
Mitglied seit
14 Apr 2010
Beiträge
2,264
Punkte für Reaktionen
100
Punkte
63
Ich habe seid Jahren meine FBen mit einem benutzerdefiierten Timestring ausgestattet (mit FBEDitor).
Allerdings kommt es bei beiden alle paar Woche vor das der Timestring gelöscht wurd und der StandardString wieder eingetragen ist.
Hat jemand das gleiche Problem und dafür die Ursache/eine Lösung?

Die Boxen sind mit Freetz erweitert und starten per Chrome jede Nacht um 3:00 Uhr neu.

Danke
 
Klingt interessant.
Was genau ist ein "Timestring" bei der FritzBox ?
 
Das ist die Variable TZ_string, die unter timezone_manual in der Datei ar7.cfg in der Konfig der Fritzbox eingetragen werden kann, z.B. "CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00".
Näheres findest du auch, wenn du einfach hier im Forum nach "Timestring" suchst: Wie Uhrzeit der FB DAUERHAFT umstellen (Zeitzone ändern)?
 
Genau!
Kann es sein wenn der NTP-Server zu lange zu antworten braucht das dann der benutzerdefinierte String gelöscht wird?
 
So gestern hatte die 7490 (6.80) anscheinend einen Reboot hingelegt und ich habe wieder die dt. Zeit in der Box.
So ein Mist. Hat keiner eine Idee was das sein kann?
ich denke damit kann ich mich ja nicht an AVM wenden oder?

Anbei der betreffende Abschnitt
ntpclient {
server_list = "pool.ntp.org";
chrony_enabled = yes;
}


led {
infoled_reason = 11;
control = led_off;
button_events_disable = no;
}


timezone_manual {
enabled = yes;
offset = 0;
dst_enabled = yes;
TZ_string = "CST6CDT,M4.1.0,M10.5.0";
name = "Central_Standard";
}

Wie kann ich noch einmal dies als Code einfügen?
 
Zuletzt bearbeitet:
Da hat erst heute jemand ganz viele mehr oder weniger brauchbare Vorschläge gemacht, wie man noch einmal dies als Code einfügen kann.
 
Ok. Aber das Problem bleibt. Alle paar Wochen muss ich den String wieder manuell einstellen.
Hat keiner eine Idee wie ich das vergessen unterbinden kann?
 
Mist. Heute stehts wieder auf MEZ.

@PeterPawn Du als Guru ;) Hast du eine Idee? Ich bin lernfähig
 
Voriger Beitrag gelöscht, da neue Erkenntnisse über: timezone_manual

1. Der richtige ar7.cfg Editor für timezone_manual heisst: ctlmgr_ctl
2. Der TZ_string wird nicht händisch eingetragen, sondern er wird erzeugt
3. ...aus dem Inhalt von: tz_offset, tz_dst_enabled und tz_offset_minutes
4. Bei jeder Änderung von tz_enabled, tz_offset, tz_dst_enabled und tz_offset_minutes startet die Box neu
5. Bei Änderung von ntp_server erscheinen Erfolgs/Misserfolgsmeldungen im Ereignislog, sofort und ohne Neustart
6. tz_name hat keine Funktion, ist als Beschreibung zu sehen, Änderung ohne Neustart
7. Nach Neustart hat TZ_string bspw. diesen Inhalt: XXX-1:0
8. Auch die Umgebungsvariable: TZ
9. Wenn tz_enabled != 0 werden zusätzlich 2 Umgebungsvariablen gesetzt: MANUAL_TZ und MANUAL_TZ_ENABLED

Getestet mit einer 7112 und extra dafür (ctlmgr_ctl) geschriebenen Shellskriptfunktion (tzm)
Screenshot_2017-02-07-14-39-06.png
(tz_enabled bildet aus tz_offset, tz_offset_minutes und tz_dst_enabled den: TZ_string)
Von Änderungen betroffen sind in der ar7.cfg...
ntpclient {}
1. chrony_enabled
2. ntp_server
(Liste, getrennt durch Komma ohne Leerzeichen bei Eingabe)
Beispiel: ctlmgr_ctl w time settings/ntp_server server1,server2,server3
...und natürlich...
timezone_manual {}

Quelle: http://wehavemorefun.de/fritzbox/Time_(ui) <-- Leider Offline
 
Zuletzt bearbeitet:
Danke für deine Ausführungen aber was willst du mir damit sagen?
Der String ist ja korrekt geändert und über Monate läuft es. Nur irgendwann sehe ich auf dem MT-F die Ortzeit plus 7 Stunden und weiss so das der String wieder verloren gegangen ist. Das heisst, ich sehe auf der dann erstellten Sicherung
TZ_string = "";

Warum?
Wie kann ich dies verhindern?
Prinzipiell wäre es ein optisches Problem aber auf einmal können mich Anrufer aus Dtl nicht erreichen da die Klingelsperre aktiv ist (Ich wurde ein paar mal morgens um 3:00 Uhr von irgendeinem Umfrageinstitut angerufen.
 
TZ_string wird automatisch "befüllt" wenn tz_enabled=yes ist.
(Wenn ctlmgr_ctl benutzt wird)
TZ_string wird dann aus offset und dst_enabled
gebildet.
Und sieht dann immer so aus: XXX-1:0
(Wenn: offset=-1 und dst_enabled=no)
Gestalte mal deinen TZ_string nach diesen Regeln,
Code:
timezone_manual {
enabled = [color="red"]yes[/color];
offset = [color="blue"]6[/color];
dst_enabled = [color="red"]yes[/color];
TZ_string = "XXX[color="blue"]5[/color]:0";
name = "Egal_aber_ohne_Leerzeichen";
}
(Durch dst_enabled wird 1 Stunde abgezogen)
...oder andere "Richtung"...
Code:
timezone_manual {
enabled = [color="red"]yes[/color];
offset = [color="blue"]-6[/color];
dst_enabled = [color="red"]yes[/color];
TZ_string = "XXX[color="blue"]-7[/color]:0";
name = "Egal_aber_ohne_Leerzeichen";
}
...wenn nicht mittels ctlmgr_ctl möglich, dann mittels: FBEditor

PS: Codetags = [ code ]Quelltext[ /code ] (ohne Leerzeichen)

:confused:
Plausibilitätspüfung?
Wahrscheinlich ist es ein Prozess, der unter bestimmten Bedingungen timezone_manual{} (oder die gesamte ar7.cfg) parsed und bei "Unstimmigkeiten" zurücksetzt.
Vielleicht am Tag von Sommer/Winterzeit Umstellung :gruebel:
...oder im Zuge einer Konfigänderung.
 
Zuletzt bearbeitet:
hmm.
Der String
"CST6CDT,M4.1.0,M10.5.0"
ist auf ewig vielen Seiten im Netz zu finden. Ausserdem hab ich ihn damals aus meiner Linux-Kiste kopiert.
Hiermit funktioniert auch Sommerzeit umstellung super (ich glaub Sommerzeit 1 Woche später als in Dtl, Winterzeit gleich)
dst enabled muss auf yes stehen da ja sonst keine Sommerzeit geschieht oder?
Also kann da was in der internen FW manchmal falsch übersetzt werden? An der Konfig wird nichts geändert. Es passiert einfach irgendwann. Nicht bei der Zeitumstellung oder Konfigänderung. Eines morgens bekomme ich mit das ich wieder MEZ habe (und der String den Wert "" hat).
 
Moin


Da steht dann auch wofür dst_enabled steht: daylight saving time
 
Ich würde das "Verschwinden" der Einstellungen auf einen "corner case" beim Schreiben einer neuen Version der ar7.cfg zurückführen (aber nur "geraten").

Wenn irgendwo mal der "ctlmgr" ohne passenden Wert für "TZ" im Environment aufgerufen wird (solche Aufrufe mit einem eingeschränkten Environment können immer wieder mal - absichtlich oder versehentlich - vorkommen, bei der 6490 wird z.B. m.W. die "/var/post_install" mit einem sehr unvollständigen Environment aufgerufen, was dann zu Folgeproblemen führt oder zumindest führen kann - keine Ahnung, ob das wirklich mit Absicht seitens AVM so geschieht) und dann aus irgendeinem Grund die "ar7.cfg" neu schreibt bzw. interne Strukturen (es wird ja auch viel mit "shared memory" zwischen den AVM-Komponenten gearbeitet) dann entsprechend setzt, dann könnte es vermutlich zu einem solchen Problem in sehr unregelmäßigen Abständen kommen, weil es eben die notwendigen Randbedingungen braucht, damit der Effekt sichtbar wird.

Zusätzlich verwaltet AVM diese Einstellung noch in der Datei "/etc/TZ" (das ist ein Symlink auf "/var/TZ") und liest die bei einigen Gelegenheiten (im Prinzip bei allen, wo die "rc.conf" aufgerufen wird und das sind auch nicht wenige - man braucht nur mal ein "grep" nach "rc.conf" auf die gesamte Firmware loszulassen) wieder aus dieser Datei, um sie mit "export" dann im Environment des aktuellen Prozesses bzw. seiner "Kinder" zu verankern. Da braucht es bloß Probleme bei diesem Auslesen geben (das erfolgt mit "cat /etc/TZ"), damit da eine Instanz mit einem leeren Wert für "TZ" an den Start geht.

Wer allen Problemen (zumindest allen mir bekannten, das müssen nicht tatsächlich auch alle denkbaren sein) aus dem Weg gehen will, der ändert bereits in "/etc/default.049" (bei der deutschen Firmware sollte es nur dieses Verzeichnis geben, bei der internationalen weiß ich es nicht, aber nach der Signatur wird hier ja auch die deutsche verwendet) den Inhalt der Datei "TZ" und verzichtet auf das Überschreiben mittels "timezone_manual.enabled" - das war m.W. für die internationale Version gedacht und solange man mit der FRITZ!Box nicht wirklich auf Wanderschaft über die Grenzen von Zeitzonen geht, sollte das auch nicht weiter stören, wenn man den "fallback"-Wert geändert hat (erst recht nicht bei der Verwendung von Freetz-Images). Fehlt dann mal wieder irgendwo die Angabe der "TZ"-Variablen, wird wenigstens der Wert aus den Standardeinstellungen verwendet.

@chilango79:
Sorry, daß ich auf #8 nicht reagiert habe ... ich hatte es nicht gesehen, da mich beim Lesen anderer Unterforen immer mehr zurückhalte und das Thema eher in "Modifikationen" verorten würde. Da ist auch viel weniger los und so wäre es mir vermutlich auch früher aufgefallen (obwohl ich #8 dann vermutlich immer noch nicht gesehen hätte auf die Schnelle beim "Querlesen").
 
@PeterPawn: Würde es was bringen, wenn tz_enabled=no und in der /var/flash/featovl.cfg die TZ individuell gesetzt wird?
(War eigentlich mein erster Gedanke)
 
kein Problem Peter. Ich hab ja auch nicht nachgedrängelt.
Ich versuche grad die default.049/TZ zu ändern.
Default ist dort die
CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00

Stelle ich meinen String CST6CDT,M4.1.0,M10.5.0 entsprechend um auf
CST-6CDT-M4.1.0/02:00:00:00,M10.5.0/02:00:00

???
 
@chilango79:
Der String enthält nach den drei Buchstaben mit der Bezeichnung der Zeitzone den Offset zu GMT - negative Werte bei "rechts" vom Meridian und positive bei "links" davon. Der Offset nach der DST-Zone kann entfallen, wenn er "-1" im Vergleich zum normalen Offset ist, es schadet aber auch nicht, ihn anzugeben ... was bei Dir dann eigentlich "CST6DST5,[...]" heißen müßte, wenn ich mich nicht vertan habe. Das Format der TZ-Zeichenkette steht in irgendwelchen POSIX-Spezifikationen, leichter zu finden ist aber die Beschreibung in der GNU-C-Library: https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html

@koy:
Eher nicht - zumindest nicht allgemeingültig und in aktuellen Versionen. Wie man beim Vergleich mit älteren Versionen feststellen kann, werden seit einiger Zeit (;-)) nur noch Variablen in der "featovl.cfg" berücksichtigt, die mit "CONFIG_" beginnen und einen eher simplen Aufbau bei den Werten haben ... auch das Überschreiben von Werten mit Leerzeichen oder anderen Sonderzeichen im Inhalt ist nicht länger möglich und damit ist auch die Gefahr der "command injection" oder für "directory traversals" über solche Variablen gebannt, wenn die mal wieder irgendwo ohne weitere Maßnahmen in `...`-Konstruktionen (die "eval"-Statements sind fast alle raus oder zumindest nicht mehr kritisch) oder beim Bilden von Dateinamen verwendet werden.

- - - Aktualisiert - - -

Wenn man noch einmal genauer in die "rc.conf" schaut (an der Stelle unterscheiden sich die 06.06 für die 7270v2/v3 und die 06.80 für die 7490 auch nicht wesentlich voneinander):

74.06.06
Code:
##########################################################################################
## Time Zone
##########################################################################################
MANUAL_TZ_ENABLED="`echo timezone_manual.enabled | ar7cfgctl -s 2>/dev/null`"
if [ "$MANUAL_TZ_ENABLED" = "yes" ]; then
MANUAL_TZ="`echo timezone_manual.TZ_string | ar7cfgctl -s 2>/dev/null | sed s/\\"//g`"
rm -f /var/TZ
echo $MANUAL_TZ >/var/TZ
else
rm -f /var/TZ
ln -s /etc/default.$Country/TZ /var/TZ
fi
[COLOR="#FF0000"]export TZ=`cat /etc/TZ`[/COLOR]

113.06.80
Code:
##########################################################################################
## Time Zone
##########################################################################################
MANUAL_TZ_ENABLED="`echo timezone_manual.enabled | ar7cfgctl -s 2>/dev/null`"
if [ "$MANUAL_TZ_ENABLED" = "yes" ]; then
MANUAL_TZ="`echo timezone_manual.TZ_string | ar7cfgctl -s 2>/dev/null | sed s/\\"//g`"
rm -f /var/TZ
echo $MANUAL_TZ >/var/TZ
else
rm -f /var/TZ
TZ_EXT="`echo timezone_manual.country_timezone | ar7cfgctl -s 2>/dev/null | sed s/\\"//g`"
if [ -n "${TZ_EXT}" ] && [ -f "/etc/default.$Country/TZ_ext/${TZ_EXT}/TZ_String" ] ; then
ln -s /etc/default.$Country/TZ_ext/${TZ_EXT}/TZ_String /var/TZ
else
if [ -f "/etc/default.$Country/TZ_ext/.default/TZ_String" ] ; then
ln -s /etc/default.$Country/TZ_ext/.default/TZ_String /var/TZ
else
ln -s /etc/default.$Country/TZ /var/TZ
fi
fi
fi
[COLOR="#FF0000"]export TZ=`cat /etc/TZ`[/COLOR]
dann findet man schon in dieser Datei den ersten Grenzfall - hier ist eine "race condition" denkbar und am Ende hat man das bei der 7490 sogar "noch schlimmer" gemacht, denn hier ist die "kritische Zeitspanne" größer und bietet mit mindestens einem zusätzlichen Dateizugriff (von dem zusätzlichen Aufruf von "ar7cfgctl" in diesem kritischen Abschnitt fange ich gar nicht erst an, ich meine hier den Test mit "-f" und das sind "im Normalfall" sogar zwei solche Tests) auch noch zusätzliche "Wahrscheinlichkeiten" für einen zwischenzeitlichen Task-Wechsel des Systems.

Der Teil mit dem Löschen der "/var/TZ" und dem Anlegen als Symlink oder als Textdatei bei "manuellem Eintrag" wird wirklich bei jedem Aufruf der "rc.conf" ausgeführt und dabei wird eben auch immer die "globale" Datei "/var/TZ" angepackt.

Da die auch gleich erst einmal gelöscht wird, bevor sie neu angelegt wird, kann eine Unterbrechung des aktuellen Prozesses vor dem Schreiben der Datei oder vor dem erneuten Verlinken durch einen Task-Wechsel (und das FRITZ!OS arbeitet ja mit mehreren Tasks) dazu führen, daß ein parallel arbeitender Prozess, der nun seinerseits gerade an der Stelle mit dem rot markierten Kommando seine Arbeit wieder aufnimmt, schlicht ins Leere greift und damit wirklich nichts in seiner "TZ"-Variablen steht.

Ich kann mich gerade nicht daran erinnern, daß irgendwelche Aufrufe der "rc.conf" über Semaphoren oder andere Mechanismen serialisiert werden - damit ist auch die theoretische Chance gegeben, daß zwei Instanzen parallel mit der "rc.conf" arbeiten und damit auch die Chance, daß diese irgendwann mal zu einem ungünstigen Zeitpunkt unterbrochen werden - zumal gerade bei Dateizugriffen schon mal ein Taskwechsel dadurch erfolgen kann, daß ein Prozess zuvor eine Sperre auf so einer Datei hatte, diese nun freigegeben wurde und damit ein auf diese Freigabe wartender Prozess jetzt wieder bei der Zuteilung an der Reihe ist.

Hier müßte AVM also für eine "korrekte" Implementierung noch zusätzliche Vorkehrungen treffen, daß zwischen dem Löschen einer "alten" "/var/TZ" und dem Einrichten einer neuen (ob nun als Datei oder als Symlink, ist dabei egal), kein anderer Prozess den Inhalt von "/etc/TZ" auslesen will.

Das ist aber fast nicht zu realisieren (die verwendete C-Library läßt sich bereits auf die Verwendung von /etc/TZ konfigurieren mit der Build-Option UCLIBC_HAS_TZ_FILE), müßte man an die Stelle des Löschens und anschließenden Neuanlegens wahrscheinlich besser einen Vergleich setzen (nur wenn es wirklich eine Differenz zu vorher gibt, muß man die Datei überhaupt ändern) und bei notwendiger Änderung dann wieder einen Mechanismus, der (mit höherer Wahrscheinlichkeit als bisher) jederzeit sicherstellt, daß es eine gültige Datei "/var/TZ" gibt (den Symlink unter "/etc/TZ" kann man im SquashFS nicht ändern).

Dazu könnte man z.B. den Inhalt der "/etc/default.$Country/TZ" in die Datei "/var/TZ" kopieren anstatt von "/var/TZ" noch einmal per Symlink ins SquashFS zu verweisen ... dann handelt es sich bei "/var/TZ" immer um eine reguläre Datei und man könnte nach dem Prinzip "neue Datei samt Inhalt erstellen und anschließend umbenennen, wobei die vorhandene ältere Datei gleichen Namens ersetzt wird" sicherstellen, daß es immer eine Datei "/var/TZ" gibt, denn der Linux-Syscall "sys_rename" arbeitet bei einem derartigen Umbenennen "atomar".
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.