ubuntuusers.de

„post-down“-Action wird in NetworkManager-Dispatcher-Skript ignoriet

Status: Ungelöst | Ubuntu-Version: Ubuntu 10.10 (Maverick Meerkat)
Antworten |

zenza

Anmeldungsdatum:
12. Februar 2009

Beiträge: 33

Moin,

damit ich hier im Wohnheim ins Internet kann, muss ich meine Kiste erstmal per SSH authentifizieren. Dazu soll per NetworkManager-Dispatcher-Script die SSH-Verbindung automatisch aufgebaut werden, sobald die entsprechende Netzwerk-Verbindung online geht. Geht  g e n a u   d i e s e  Verbindung wieder offline, soll der SSH-Client auch abgeschossen werden. (Da allein die SSH-Verbindung [leider geht nur Passwort-Authentifikation] partout nicht aus dem Dispatcher-Script raus klappen wollte, weder mit OpenSSH, noch via sshpass, noch mit putty, hab ich mir nen eigenen Client in Java geschrieben.) Ich hatte mir das also folgender maßen gedacht:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/bin/bash

# Das Interface, dass gerade von einer Aktion betroffen ist
IFACE=$1
# die konkrete Aktion
ACTION=$2

# nur die folgende Verbindung soll betroffen sein
REQUIRED_CONNECTION_NAME="leRouter"

progPath=/opt/studnet
logFile=client.log
pidFile=.client.pid

case "$ACTION" in
        pre-up)
                ;;
        up)
                if nmcli con status | grep $REQUIRED_CONNECTION_NAME >/dev/null 2>&1; then
                        # Ist die entsprechende Verbindung aktiv
                        # ggf. alte Client-Instanz abschießen
                        kill -9 `cat $progPath""/""$pidFile` >/dev/null 2>&1 &&
                        rm -f $progPath""/""$pidFile

                        # Client im Hintergrund starten
                        java -jar $progPath""/studnetclient.jar -uUSERNAME -pPASSWORT HOST >""$progPath""/""$logFile 2>&1 &
                        # PID merken, dass man die letzte instanz wieder abschießen kann (killall java wäre etwas gefährlich ;))
                        echo $! > $progPath""/""$pidFile
                fi
                ;;
        down)
                ;;
        post-down)
                if ! nmcli con status | grep $REQUIRED_CONNECTION_NAME >/dev/null 2>&1; then
                        # Ist die entsprechende Verbindung nicht aktiv, gehen wir davon aus, dass sie gerade runtergefahren wurde
                        # und versuchen die alte Client-Instanz abzuschießen
                        kill -9 `cat $progPath""/""$pidFile` >/dev/null 2>&1 &&
                        rm -f $progPath""/""$pidFile
                fi
                ;;
        *)
                echo $"Usage: $0 {up|down|pre-up|post-down}"
                exit 1
esac

/etc/NetworkManager/dispatcher.d/02studnet

So, der Mist ist: die Action „post-down“ wird niemals aufgerufen. Hab natürlich auch schon mit Debug-Ausgaben gearbeitet: bei down und up kommt was, ansonsten nichts. Ist das normal? Hab ich nen Fehler im Script? Hab das größtenteils auch nur aus dem Wiki zusammenkopiert: NetworkManager/Dispatcher …

Ich habs jetzt so gemacht, dass ich in der down-Action abfrage, um welches Interface es sich gerade dreht. Das Problem ist aber, dass die Verbindungen nicht zwingend an ein bestimmtes Interface gebunden sind und ein Interface auch nicht nur eine Verbindung kennt. Irgend ne Idee?

Danke schonmal.

Update:

Ok, man NetworkManager klärt auf. Die Actions pre-up und post-down werden dort garnicht aufgeführt. Also gibt es diese wahrscheinlich garnicht (mehr). Ich werds mal in der Artikeldiskussion ansprechen. Trotzdem einer ne Idee, wie ich im Dispatcher-Script garantieren kann, dass genau dann, wenn die betreffende Verbindung abgebaut wird, der SSH-Client abgeschossen wird?

Antworten |