Dienste starten/stoppen bei Link up/down

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

XPectIT

Benutzer
Registriert
09. Jan. 2012
Beiträge
31
Reaktionspunkte
0
Punkte
6
Mahlzeit,

kennt jemand eine Möglichkeit auf der DS (212j in meinem Fall) Dienste zu starten wenn eine Netzwerkverbindung besteht und wieder zu stoppen wenn der Link (also die physikalische Verbindung) abbricht?

Hintergrund:
Meine DS ist "Mädchen für alles" im Heimnetzwerk. u.a. läuft Squid, DNS, DHCP und OpenVPN (als Client). Wenn keiner Zuhause ist, schalten wir den Router per Funksteckdose aus. Damit hat die DS keinen Link mehr.
Jetzt dreht OpenVPN (als ipkg) durch und will alle paar Sekunden (einstellbar in der Config) neu starten. Dabei schreibt es immer 2 Zeilen in sein Logfile. Das kann ich umgehen indem ich sämtliche OpenVPN Logs nach /dev/null schiebe. Ich logge auf meinem Server.
Ausserdem läuft der Squid und verhindert den Ruhezustand der Festplatten, weil er seinen Cache checkt/reorganisiert/$whatever.

Das sind beides Probleme die nicht an der DS hängen aber den Ruhezustand verhindern. Beides könnte ich umgehen, wenn ich bei Link up (nicht bei Interface up) die Dienste starten und bei Link down die Dienste stoppen kann.

Hat jemand ne Idee dazu?
 
Ich habe mir mal selbst etwas aus den Fingern geschnitzt. Evtl. hat ja noch jemand Verwendung dafür.

ACHTUNG: Das Ding ist noch nicht lauffähig, wer sich das Skript kopiert und ausführt ist selbst schuld.
Rich (BBCode):
#! /bin/sh
# Startet Dienste bei Link-up.
# Link-up ist nicht interface up, sondern wenn der LINK auf der
# Netzwerkkarte hergestellt wird. 
# z.B. - Netzwerkkabel eingesteckt
#      - Switch eingeschaltet

STARTSERVICES="/root/S80squid /root/S06openvpn"
LS0=`ifconfig eth3 | grep RUNNING | wc -l`
LS1="$LS0"
LS2="$LS0"
LS3="$LS0"
STOPSERVICES="$STARTSERVICES"


while true
do  LS0=`ifconfig eth3 | grep RUNNING | wc -l`
    if [ "$LS3$LS2$LS1$LS0" == 0111 ]; then
        # Link wurde hergestellt, Dienste starten
        for SERV in $STARTSERVICES
        do  if [ -x $SERV ]; then
               echo `date`" $SERV wird gestartet"
               sh $SERV
            fi
        done
        # damit flackern vermieden wird
        sleep 10
    elif [ "$LS3$LS2$LS1$LS0" == 1000 ]; then
        # Link wurde entfernt, Dienste stoppen
        for SERV in $STOPSERVICES
        do  if [ -x $SERV ]; then
               echo `date`" $SERV wird gestoppt"
               sh $SERV
            fi
        done
        # damit flackern vermieden wird
        sleep 10
    else
        # nix zu tun
    fi
    LS3="$LS2"
    LS2="$LS1"
    LS1="$LS0"
    sleep 5
done

Das Skript wird bei Systemstart gestartet. Ich gehe mal von einem Link aus.
1111: Anfangsstatus
sleep 5
1111: nix tun
...
1110: Link down, noch nix machen
sleep 5
1100: Link down, noch nix machen
sleep 5
1000: Link down, Dienste stoppen
sleep 10
0000: nix tun
sleep 5
0000: nix tun
...

Wenn der Link wieder hochkommt, starten die Dienste wieder.
 
Hallo!

Darf ich mal eine ganz blöde Frage stellen: warum schaltet ihr den Router ab, lasst die DS aber laufen?
 
Einfach ausgedrückt aus Bequemlichkeit und auch wegen unnötigem WLAN beim Schlafen.

Die DS steht etwas "versteckt" auf einem Schrank und es ist nicht jeder 1.95m groß und kommt ohne Hilfe an den Schalter. :-)

Abends wenn wir ins Bettchen gehen: -> Router aus
Morgens gehe ich ins Büro, meine Frau nicht immer. Ist sie auch arbeiten, bleibt der Router aus. Ist sie daheim: -> Router an

Also bleibt der Router manchmal von ca. 23 bis ca. 17 Uhr aus und manchmal "nur" von 23:30 bis 6 Uhr. Hier kann ich keinen Terminplan hinterlegen.
 
Danke!
Obwohl "bequem" wäre ja, ihn dauerhaft eingeschaltet zu lassen. :)
Bei mir läuft eben auch das Telefon über den Router, da lasse ich ihn lieber eingeschaltet. Aber das WLAN läßt sich ja zeitgesteuert ein- und ausschalten - bei dir vermutlich nicht.
 
...Bei mir läuft eben auch das Telefon über den Router, ....
Bei mir zu Glück nicht.

Wir haben ja nicht nur die eine Funksteckdose im Haus. Das ganze Wohnzimmer wird damit entsaftet, so gibts auch kein Standby-Stromverbrauch.

Etwas inkonsequent ja, einerseits die DS laufen lassen und andererseits wegen Standby das Wohnzimmer abschalten. ;-)
 
Bei mir zu Glück nicht.

Ach, das ist schon in Ordnung. Der Router muß eh 24/7 laufen, sonst wäre meine DS von aussen nicht erreichbar.
Aber immer interessant, wie andere ihre Geräte schalten - auch wenn es manchmal etas 'inkonsequent' ist. :)
 
Nach längerer Zeit grabe ich hier mal meinen eigenen Beitrag aus um einen Nachtrag zu machen:

Ich habe zwischenzeitlich mein Netzwerk Daheim etwas erneuert/verändert (300 MBit/s WLAN, pfSense Firewall, ...).
Mein ("neuer" DLINK DIR-615 von eBay) WLAN Router ist zugleich 5-Port Switch und wird abends und wenn keiner hier ist, per Fernbedienungssteckdose vom Strom getrennt.
Kein Strom -> kein WLAN, kein LAN, kein Verbrauch (hab ich ja schonmal geschrieben).

Ich hatte jedoch jetzt plötzlich das folgende Problem (und bringe die Lösung gleich mit):
Schalte ich also Nachts den Router/Switch aus, so geht die DS danach auch in den Ruhezustand. Das ist gut.
Wenn ich den Switch am nächsten Tag wieder einschalte, so wacht die DS nicht mehr auf. Das ist nicht gut.

Es hat mich wireshark, tcpdump und nicht wenig Hirnschmalz gekostet die Ursache zu finden und ist wohl in den verbauten Komponenten bzw. den verwendeten Betriebssystemen begründet (Auf dem DIR-615 läuft z.B. DD-WRT als Software und ne pfSense hat auch nicht jeder Zuhause).
Der Switch hat intern eine Tabelle in der steht welche MAC-Adresse an welchem Port hängt. Wird der Switch vom Strom genommen, geht diese Zuordnung verloren. Wenn der Switch wieder Strom hat, baut er die Tabelle anhand vom Datenfluss wieder neu auf. Normalerweise läuft das mit arp-Broadcasts. Wenn die DS allerdings im Ruhezustand ist, antwortet sie nicht auf die Broadcasts.
Als Folge weiß der Switch nicht mehr, dass die DS an einem seiner Ports hängt und die DS schläft weiter da sie keine Netzwerkpakete bekommt.

Was hat das jetzt eigentlich mit diesem Beitrag zu tun?
Ganz einfach. Hier die Lösung dazu:
Mit dem o.a. Skript (und kleinen Anpassungen) lasse ich auf meiner DS prüfen ob der Carrier, also der Physikalische Link, gerade hergestellt wurde. Wenn ja, dann sendet die DS einen Ping an irgendeinen Rechner. Der Switch erkennt, das hier ein Gerät ist und schreibt es in die Port-zu-MAC Tabelle. Ab jetzt ist die DS im Netz auch ansprechbar.

Ich bezweifle zwar, dass es jemanden gibt, der ähnliche Probleme hat, aber vielleicht suche ich ja irgendwann selbst meine Lösung ;-)

Grüße aus der Rhön
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat