[Gelöst] "onlinechanged" wird manchmal nicht ausgeführt

Eine Möglichkeit, $PID_FILE zu löschen, auch wenn das Skript von aussen abgeschossen wird, wären Traps. Das funktioniert allerdings nur, wenn das Skript nicht mit "kill -9" abgeschossen wird, da "kill -9" leider nicht abgefangen werden kann.

Dafür müsste irgendwo relativ am Anfang des Skripts so etwas eingefügt werden:

Code:
trap "rm -rf $PID_FILE 2>/dev/null" QUIT TERM EXIT

trap gibt's auch bei der Busybox-/bin/sh, nur "trap -l" und "trap -p" (wie bei der Bash vorhanden) kennt sie nicht.
 
Wie im Freetz-Ticket erwähnt, habe ich weiter oben hier im Thread bereits beschrieben, wie ich ergebnislos mit Trap experimentiert habe.

Dafür habe ich gerade das Phänomen hier nachstellen können, daß "Neu verbinden" /var/run/onlinestat nicht aktualisiert, was es aber bei früheren Tests immer getan hat. D.h., momentan gab get_ip -o tatsächlich eine falsche IP zurück, und zwar so lange, wie der Multid weiter lief. Nach einem Restart (multid -s; multid) geht es nun wieder, "Neu verbinden" aktualisiert die Datei und get_ip -o liefert die korrekte IP. Leider weiß ich nicht, unter welchen Bedingungen Multid anfängt zu versagen, was die Aktualisierung betrifft.
 
Das ist doch langsam nicht mehr schön. Wäre das nicht ehr eine Sache, mit der sich AVM mal auseinander setzen müsste? Nur doof, dass die jedweglichen Support bei modifizierten Boxen ablehnen (auch wenn manchmal nur hierdurch einen Bug/ Fehler nachgewiesen werden kann).
 
Neuer Watchdog-Typ auf DynDNS-Basis

Wer den AVM DynDNS-Client auf der Box laufen hat, den wird die gute Nachricht freuen, daß auch in Fällen, in welchen /bin/onlinechanged nicht aufgerufen bzw. /var/run/onlinestat nicht aktualisiert werden - bei mir (7270_v1) z.B. meistens, wenn ich auf "Neu verbinden" klicke - offenbar zuverlässig trotzdem beim Neuverbinden DynDNS aktualisiert wird. Praktisch dabei ist, daß die Datei /var/tmp/ddnsstat.txt dabei aktualisiert wird. Genauer gesagt, wird in die neue, temporäre Datei /var/tmp/ddnsstatnew.txt geschrieben, dann ddnsstat.txt gelöscht und schließlich ddnsstatnew.txt umbenannt in ddnsstat.txt. Das gibt uns die Möglichkeit, wiederum einen Watchdog auf Inotifywait-Basis zu bauen, der das Löschen der Datei beobachtet und daraufhin die gewünschte Aktion auslöst. Bei mir hat das in den letzten Tagen auch in den Fällen funktioniert, in welchen Onlinechanged und der Onlinestat-Watchdog versagt haben, weil diese Aktionen gar nicht von AVM aufgerufen wurden. Das sieht dann so aus:
Code:
{
while true; do
  [B]inotifywait -qq -e delete_self /var/tmp/ddnsstat.txt
  ip_old="$ip"
  ip=$(/usr/bin/get_ip)
  [ "$ip" ] && [ "$ip" != "$ip_old" ] || continue[/B]
  uptime > /var/tmp/uptime.txt
  echo >> /var/tmp/uptime.txt
  free >> /var/tmp/uptime.txt
  mailer \
    -s "New IP: $ip" \
    -f "Fritz!Box <[email protected]>" \
    -t "[email protected], [email protected]" \
    -m "my.smtp.server" \
    -a "user_name" \
    -w "password" \
    -i /var/tmp/uptime.txt
  rm -f /var/tmp/uptime.txt
done
} &

Daß ich mir die letzte IP merke und die Aktion nur auslöse, wenn diese sich auch geändert hat, hängt damit zusammen, daß das Löschen und Umbenennen zweimal kurz hintereinander passieren, evtl. einmal beim Disconnect und dann nochmals beim Connect. Außerdem bin ich mir nicht sicher, ob nicht noch zu anderen Anlässen, z.B. wenn der Benutzer etwas an den DynDSN-Einstellungen ändert, die Datei neu erzeugt wird. So ist es sauberer.

SaschaBr, vielleicht willst Du das ja mal testen - und wen es sonst noch betrifft.

P.S.: Vorher auf die aktuelle Trunk-Version von get_ip zu aktualisieren, macht Sinn, denn inzwischen ist Onlinestat nicht mehr die Default-Methode, weil sie ja nicht immer die korrekte IP liefert. Die übrigen Methoden sind zuverlässiger, sofern anwendbar. Auf IP-Clients geht natürlich nur die externe IP-Abfrage, und da macht dann auch dieser Watchdog hier keinen Sinn, weil ja die Box keinen Connect und somit auch keine DynDNS-Anmeldung macht. Aber das war wohl klar, ich erwähne es nur für Leute, die hier neu hinzu kommen.

Edit 2011-12-28 15:20: überflüssige Zeile aus obigem Skript gelöscht (kam durch Copy/Paste aus dem alten Skript hier herein)
 
Zuletzt bearbeitet:
Hallo Alexander.

Momentan ist meine Zeit sehr knapp bemessen. Werde aber mal schauen, dass ich am Wochenende Zeit dafür finde, das so einzubauen.
 
Ich habe das jetzt einige Tage beobachtet, und immer hat der Ddnsstat-Watchdog funktioniert, die gleichzeitig laufenden Funktionen/Watchdogs Onlinechanged und Onlinestat nur manchmal. Das finde ich sehr ermutigend. Offenbar ist nun - zumindest für DynDNS-Nutzer - ein guter Workaround für AVMs Unvermögen, Onlinechanged sauber zu handhaben (also immer aufzurufen), gefunden. Alleine dafür würde sich die Einrichtung eines DynDNS-Kontos schon lohnen, wenn ich nicht längst eines hätte. :)
 
Hallo,

ich habe eine Frage: Sehe ich das richtig, dass der Fehler auch bei einer ungefreetzten Box auftritt?

Danke!
 
Scheint so, ja. 100%ig kann man das aber nicht sagen, da man dann ja keine logs hat. ;)
 
Eben, genau das ist das Problem: AVM verweigert Support wegen Freetz oder auch nur wegen Telnet + debug.cfg auf der Box, ohne kann man das aber nicht feststellen. Sie wollen Logs zugeschickt bekommen (dafür gibt es ja eine Funktion in der AVM-Firmware), aber in diesen Logs steht nichts Relevantes drin zu dem Thema. :mad:

Nebenbei gesagt, läuft bei mir immer noch der ddnsstat-Watchdog neben den beiden anderen hier beschriebenen Lösungen (onlinechanged, onlinestat) und hatte bislang 100% Trefferquote, während die beiden anderen Methoden abkacken, also nur manchmal gehen. Für mich taugt das als Ersatz. Hat es sonst jemand probiert?
 
Nein, ich habe es nicht probiert. Hat aber nichts mit Faulheit oder Desintresse zu tun: Ich habe vor zwei Wochen überraschend schnell den Anbieter wechseln können (von 1&1 DSL nach Unitymedia Kabel). Die bereitgestellte Fritzbox (6360 Cable) von Unitymedia lässt sich aus gutem Grund ja nicht modifizieren, und ist zugenagelt bis oben hin (kein Telnet, keine selbständigen Firmware-Upgrades, etc.). Von daher läuft meine ehemalige DSL-Box (7390 mit Freetz) jetzt "nur noch" als IP-Client, und da wird das Onlinechanged ja eh nur einmalig beim Start (und manchmal auch bei diveresen Änderungen im AVM-WebIF) ausgeführt.
Deswegen läuft opendd jetzt via cron ("Spätestens nach 25 Tagen updaten" aktiviert), und Onlinechanged hat hiermit jetzt nichts mehr zu tun.

(Ich muss mir jetzt nur etwas einfallen lassen, wie ich es vsftpd im Falle einer sich doch mal ändernden IP beibringe, "reload_vsftpd aktivieren, damit die Konfiguration nach einem IP-Wechsel neu generiert wird" auch ohne Onlinechanged auszulösen. Aber das ist hier OT.)

Aber eines kann ich sagen; Ich finde diesen Ansatz/ Deine Idee mit inotifywait als onlinechanged-ersatz seeeehr gut.
 
Zuletzt bearbeitet:
Ja, hat nichts damit zu tun, aber ganz kurz: Entweder eine Schleife als Shellskript in debug.cfg oder einen Cronjob laufen lassen, der regelmäßig get_ip aufruft. Demnächst checke ich eine ausgemistete Version von get_ip ein, die dann STUN statt HTTP für die Abfrage der externen IP auf IP-Clients nutzt, das ist sehr schnell (ca. 0,05 s oder weniger) und effizient.
 
Freetz-Alternative zu AVM onlinechanged für DSL-Boxen und IP-Clients

So, ich habe das Problem mal anders gelöst, nämlich unter Umgehung von AVMs unzuverlässigem onlinechanged mit einem eigenen IP-Watchdog, der über /etc/inittab gestartet wird und auch automatisch wieder startet, sobald er (versehentlich) beendet wurde.

Ein weiterer Vorteil meiner Lösung ist, daß keine zusätzlichen Binaries wie intotify-tools benötigt werden, alles geht mit Bordmitteln.

Drittens funktioniert das ganze auch auf IP-Clients, also auf Boxen, bei deren Konfiguration AVM onlinechanged gar nicht angestoßen wird, weil sie nicht selbst die Internetverbindung aufbauen. Somit kommen jetzt auch Nutzer solcher Boxen in den Genuß von onlinechanged, können also Aktionen bei IP-Wechsel anstoßen bzw. Freetz-Pakete nutzen, die das benötigen.

Details siehe http://freetz.org/changeset/8350. Der Patch nutzt ganz normal die Onlinechanged-Infrastruktur und ruft dieselben Skripten auf wie AVM, nur eben selbst und zuverlässig, nicht mehr abhängig davon, daß multid das tut.
 
Zuletzt bearbeitet:
Hallo Alex.
Als erstes mal ein frohes neues Jahr 2012!

Besteht die Möglichkeit, das auch auf die Pre-Stabel 1.2 anzuwenden? (Wenn ich das richtig sehe, müsste ich dafür aber auch die neue Variante von get_ip (stun?) aus dem Trunk verwenden, oder?)
 
Sollte auch mit altem get_ip gehen, aber die neueste Version würde ich schon empfehlen. Sowohl Busybox stun-ip als auch der Patch aus r8350 sollten in anderen Branches funktionieren (nicht getestet).
 
So, nachdem ich zuviel gewollt hatte und mir meine Build-Umgebung zerschossen hatte (get_ip aus dem trunk wollte nicht, da es ja das Busybox-Stun benötigt und ich versucht hatte das zu aktivieren, und ich dabei wohl etwas "rabiat" war), scheine ich es jetzt geschafft zu haben (allerdings "nur" mit der letzten get_ip-Variante aus dem trunk vor stun (--extquery)):

PS:
Code:
  PID USER       VSZ STAT COMMAND
 ...
 2080 root      3480 S    pbd
 2084 root      3480 S    pbd
 2217 root      1136 S    crond -b
 2338 root      1128 S    syslogd -L -O /var/media/ftp/LOGS/syslog/syslog.fbt -b 5 -s 40
 2340 root      1132 S    /sbin/klogd -c 4
 2374 root      1132 S    inetd
 2933 root      1164 S    /bin/sh /etc/default.rrdstats/rrdstats 60
 3358 root      2348 S    nmbd -D -s /mod/etc/samba/smb.conf
 3683 root      1144 S    /bin/sh /usr/bin/spindown sda 1200 3
 3687 root      1144 S    /bin/sh /usr/bin/spindown sdb 1200 3
 3952 root      1136 S    init
 [COLOR="red"]3953 root      1132 S    /bin/sh /sbin/ip_watchdog[/COLOR]
 4013 ntp        804 S    ntpd -s -f /mod/etc/ntpd.conf
 4014 root       788 S    ntpd -s -f /mod/etc/ntpd.conf
 4824 root      1124 S    sleep 60
 4915 root      1128 S    sleep 60
 4918 root      1128 S    sleep 60
 4927 root      1124 S    sleep 60
 4929 root      3384 S N  smbd -s /mod/etc/samba/smb.conf
 4930 root      1152 S    dropbear -i -R
 4931 root      1148 S    -sh
 4963 root      1136 R    ps

Syslog vom Start:
Code:
...
Jan  1 23:14:10 fritz user.notice FREETZMOD: Starting inetd ... done.
Jan  1 23:14:10 fritz user.notice FREETZMOD: Setting up SSH authorized_keys for root ... done.
Jan  1 23:14:11 fritz user.notice FREETZMOD: dropbear is updating inetd ... active.
Jan  1 23:14:18 fritz user.notice FREETZMOD: Starting openntpd ... done.
Jan  1 23:14:21 fritz user.notice FREETZMOD: Starting rrdstats ... done. rrdstats (webcfg-one) is updating inetd ... inactive. rrdstats (webcfg-rrd) is updating inetd ... inactive.
Jan  1 23:14:23 fritz user.notice FREETZMOD: Starting Samba-nmbd ... done. samba (smbd-139) is updating inetd ... active. samba (smbd-445) is updating inetd ... active.
Jan  1 23:14:27 fritz user.notice FREETZMOD: vsftpd is updating inetd ... active.
Jan  1 23:14:27 fritz user.err telefon[2061]: SIGCHILD killdectpid
Jan  1 23:14:29 fritz user.notice FREETZMOD: rc.mod finished.
[COLOR="red"]Jan  1 23:14:29 fritz daemon.info init: starting pid 3953, tty '': '/sbin/ip_watchdog'[/COLOR]
Jan  1 23:14:29 fritz user.notice ONLINECHANGED[3956]: [online] approved
Jan  1 23:14:29 fritz user.notice ONLINECHANGED[3956]: [online] executing /etc/onlinechanged/00-get_ip
Jan  1 23:14:29 fritz user.notice ONLINECHANGED[3956]: [online] executing /etc/onlinechanged/10-openntpd
Jan  1 23:14:29 fritz daemon.info ntpd[2749]: Terminating
Jan  1 23:14:31 fritz user.notice ONLINECHANGED[3956]: [online]  * Reloading openntpd ... done.
Jan  1 23:14:31 fritz user.notice ONLINECHANGED[3956]: [online] executing /etc/onlinechanged/20-opendd
Jan  1 23:14:31 fritz daemon.info opendd[4035]: -- running OpenDD 0.7.9 in normal mode
Jan  1 23:14:31 fritz daemon.info opendd[4035]: main() : getting my ip address : xxx.xxx.xxx.xxx
Jan  1 23:14:33 fritz daemon.info opendd[4035]: getdyndnshostnames() : no need to update Mein.Dyndns.org with xxx.xxx.xxx.xxx
Jan  1 23:14:33 fritz daemon.err opendd[4035]: main() : No hostname(s) to update
Jan  1 23:14:33 fritz user.notice ONLINECHANGED[3956]: [online]  * Running OpenDD ... done.
Jan  1 23:14:33 fritz user.notice ONLINECHANGED[3956]: [online] executing /etc/onlinechanged/vsftpd
Jan  1 23:14:34 fritz user.notice ONLINECHANGED[3956]: [online]  * Reloading vsftpd ... inetd.
Jan  1 23:14:34 fritz user.notice ONLINECHANGED[3956]: [online] finished

Werde jetzt mal beobachten, was die nächsten Tage geschieht.

Stay tuned!
 
Aktuelle Trunk-Versionen von get_ip und "replace onlinechanged" für freetz-stable-1.2

Hier ist mal ein Patch (Anhang anzeigen stun_get_ip_replace_onlinechanged.tar.gz), welcher die aktuellen Versionen von
  • /usr/bin/get_ip (inkl. Busybox stun-ip),
  • /bin/onlinechanged.sh und
  • Patch "replace onlinechanged"
im Branch freetz-stable-1.2 nachrüstet. Beim Patch für stun-ip mußte ich die Symbole BB_DIR_USR_BIN und BB_SUID_DROP ersetzen durch _BB_DIR_USR_BIN und _BB_SUID_DROP (also jeweils mit führendem Unterstrich), weil das in der im Vergleich zum Trunk älteren Busybox-Version noch so war.

Vorher am besten den Branch neu auschecken oder zumindest die vom Patch betroffenen Dateien mit svn revert zurücksetzen bzw. die Datei make/busybox/patches/stun-ip.patch ganz löschen, damit sie nochmal neu angelegt wird.
 
Hallo Alex, danke für den Patch.

Um auf Nummer sicher zu gehen, habe ich (heute morgen schon) nocheinmal frisch (in ein neues Verzeichniss) ausgecheckt, den gesammten DL-Ordner hierhin verschoben, die .config übernommen, Patch von Dir eingespielt, und (grade eben) frisch gebaut und geflasht. Ergebniss:

PERFEKT!! Jetzt auch mit stun-ip.

Stay tuned!
 
Ich möchte diesen Thread nochmal gerne hochholen, da seit dem Update bei mir das "FREETZ_REPLACE_ONLINECHANGED=y" nicht mehr funktioniert.
Es handelt sich hierbei um das Image "freetz-devel-11591M" von heute auf Bases von FRITZ!OS 06.01 auf meiner 7390.

Im Webinterface von "onlinechanged" habe ich 2 DynDNS-Adressen eingetragen, die bei einem DSL-reconnect aktualisiert werden sollten.
Beim rebooten der Box steht im Log "Setting up onlinechanged scripting ... good ###.###.###.###good ###.###.###.###done ---> also dort funktionert es.

Nur beim nächtlichen oder manuellen reconnect passiert da leider nichts :-(

Habe schon alles möglich versucht. Selbst ein komplettes Recovern und darauffolgendes manuelles Eingeben der Zugangsdaten brachte leider keinen Erfolg.
Ist da schon was bekannt bzw. gibt es da schon eine Lösung
 
Ich habe gerade nicht im Kopf was da genau passiert...

Wenn die Box den DSL-reconnect macht und die Dyndns-Adressen bisher aktualisiert wurden, dann konntest du das doch bestimmt im Log sehen? Und dort steht jetzt nichts mehr, obwohl die Einträge noch dort sind? Es sieht also so aus als ob das onlinechanged Skript nicht mehr ausgeführt wird?

Gruß
Oliver
 
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.