Befehl in ip-down.local nicht bei Aufruf über ipppd
Hallo, nachdem ich in suse-linux keine Antwort bekommen habe, hoffe ich, daß mir hier jemand helfen kann: Liefere neuerdings meine Mail per ssh-Tunnel ab. Das macht providerunabhängig und klappt auch im Prinzip einwandfrei, nur bei frühzeitigem Auflegen hängt der ssh-Prozeß, und ein erneuter Aufruf ist dann blockiert. Daher wollte ich den Prozess im ip-down-part killen. Klappt aber nicht. Rufe ich /etc/ppp/ip-down.local manuell auf, ist alles in Butter. Das erste echo gibt die richtige pid aus, das zweite echo ist leer: der Prozess wurde abgeschossen. Beim Aufruf von ip-down.local über den ipppd habe ich aber zwei leere Einträge von ip-down in /var/log/messages (von den beiden Echos: s.u.). Scheint so, als ob ps aux, etc. nix zurückgibt und deshalb "kill" nicht greift. Dann hatte ich den Kill-Aufruf in ein separates Script ausgelagert: Das wird definitiv beim Auflegen aufgerufen, aber auch hier klappt das gewünschte nur bei manuellem Aufruf. Frage mich, ob das irgendwas mit der Umleitung vom standard output zu tun hat(???), und insbesondere, wie ich das zurechtbiegen kann. Irgendwelche Ideen? ------------------------ aus man ipppd: /etc/ppp/ip-up ...... and with its standard input, output and error streams redirected to /dev/null. ----------------------------- abgespeckte /etc/ppp/ip-down.local: #!/bin/sh BASENAME=`basename $0` case "$BASENAME" in ip-up.local) ssh -l username -n -f -L 12345:localhost:25 ldv39.uni-trier.de sleep 240 /usr/sbin/sendmail -q & ;; ip-down.local) echo `/bin/ps aux | /usr/bin/grep '12345.*ldv39' | /usr/bin/awk '{ print $2;}'` kill -9 `/bin/ps aux | /usr/bin/grep '12345.*ldv39' | /usr/bin/awk '{ print $2;}'` echo `/bin/ps aux | /usr/bin/grep '12345.*ldv39' | /usr/bin/awk '{ print $2;}'` ;; *) ;; esac -- Gruesse Rolf
Rolf Hillen wrote:
Hallo,
nachdem ich in suse-linux keine Antwort bekommen habe, hoffe ich, daß mir hier jemand helfen kann:
ip-down.local) echo `/bin/ps aux | /usr/bin/grep '12345.*ldv39' | /usr/bin/awk '{ print $2;}'`
$ man logger und probier mal die Befehle in einer Sub-Shell zu starten. HTH leo
Leopold Toetsch wrote:
Rolf Hillen wrote:
ip-down.local) echo `/bin/ps aux | /usr/bin/grep '12345.*ldv39' | /usr/bin/awk '{ print $2;}'`
$ man logger
und probier mal die Befehle in einer Sub-Shell zu starten.
Das mache ich doch, indem ich die Zeile mit dem "kill" (oder echo) in Klammern setze?! Daran hatte ich auch schon gedacht und es ausprobiert - ohne den geringsten Erfolg. Analog hatte ich ja auch ein anderes Script "killssh" ------------ #!/bin/sh logger -t killssh "part1" logger -t killssh `/bin/ps -aux | /usr/bin/grep '12345.*ldv39'| /usr/bin/awk '{ print $2;}'` kill -9 `/bin/ps -aux | /usr/bin/grep '12345.*ldv39'| /usr/bin/awk '{ print $2;}'` logger -t killssh "part2" --------------------- im ip-down-part aufgerufen. Das Killen klappt auch hier nur bei "manuellem" Aufruf. Über den ipppd wird's zwar aufgerufen, tut aber wieder nicht das Gewünschte: in /var/log/messages nach dem Auflegen: Oct 9 16:25:34 wiesel killssh: part1 Oct 9 16:25:34 wiesel killssh: part2 ---------------------- per shell: wiesel:~ # ps aux |grep ldv39 root 10343 0.0 0.8 2016 1068 ? S 16:24 0:00 /usr/bin/ssh -l hillen -n -f -L 12345:l ocalhost:25 ldv39.uni-trier.de sleep 240 root 10923 0.0 0.3 1136 416 pts/0 S 16:27 0:00 grep ldv39 wiesel:~ # /etc/ppp/killssh /etc/ppp/killssh: kill: (10933) - No such pid wiesel:~ # ps aux |grep ldv39 root 10988 0.0 0.3 1136 416 pts/0 S 16:36 0:00 grep ldv39 (10933 war die PID vom grep-Befehl - kann man irgendwie verhindern, daß ein "grep" die eigene PID findet??) danach in /var/log/messages: Oct 9 16:27:20 wiesel killssh: part1 Oct 9 16:27:20 wiesel killssh: 10343 10928 Oct 9 16:27:21 wiesel killssh: part2 -- Gruesse Rolf
Rolf Hillen wrote:
logger -t killssh `/bin/ps -aux | /usr/bin/grep '12345.*ldv39'| /usr/bin/awk '{ print $2;}'`
Probier einfach schrittweise die einzelnen Zeilen zu Loggen: PROZ=$(/bin/ps auxww) logger -t killssh $PROZ PID=$(echo $PROZ | grep ...) logger ... $PID usw.
(10933 war die PID vom grep-Befehl - kann man irgendwie verhindern, daß ein "grep" die eigene PID findet??)
grep PID | grep -v grep Das koennte auch das Problem gewesen sein. HTH leo
Leopold Toetsch wrote:
Probier einfach schrittweise die einzelnen Zeilen zu Loggen:
PROZ=$(/bin/ps auxww) logger -t killssh $PROZ PID=$(echo $PROZ | grep ...) logger ... $PID usw.
Das hatte ich gemacht, und irgendwann ging es plötzlich, ohne daß ich so recht wußte, warum. nach einem großen Ahrghfhh%&$: die beiden "w"s haben's gebracht. Offenbar war die Ausgabe beim Aufruf über den ipppd nicht so lang, daß "grep" was finden konnte..... Jetzt klappt's! Das muß ich mir aber noch mal ganz genau ansehen. Oder fällt Dir (sonstwem) so spontan ein, warum da ein Unterschied (Aufruf über ip-up.local und über "manuell" über shell) zu sein scheint?
(10933 war die PID vom grep-Befehl - kann man irgendwie verhindern, daß ein "grep" die eigene PID findet??)
grep PID | grep -v grep ah
Vielen Dank für die Hilfe:-)! -- Gruesse Rolf
Rolf Hillen wrote:
Leopold Toetsch wrote:
PROZ=$(/bin/ps auxww)
... Jetzt klappt's!
Fein.
Das muß ich mir aber noch mal ganz genau ansehen. Oder fällt Dir (sonstwem) so spontan ein, warum da ein Unterschied (Aufruf über ip-up.local und über "manuell" über shell) zu sein scheint?
Ist etwas eigen, haette mit 'ps aux' auf der Shell auch nicht gehen duerfen, da die Ausgabe damit auf 80 Zeichen beschraenkt ist - ausser du hast ein breiteres Shell-Fenster bzw. eine breitere Console, dann passt sich die Breite an.
Vielen Dank für die Hilfe:-)!
Bitte, gerne leo
Rolf Hillen wrote:
[...] case "$BASENAME" in ip-up.local) ssh -l username -n -f -L 12345:localhost:25 ldv39.uni-trier.de
In Scripts sollte man immer den Pfad der Programme mit angegeben, so auch hier. Also nicht nur "ssh", sondern "/usr/bin/ssh".
sleep 240
Und diesen Befehl sollte man hier meiden, er vrzoegert den Verbindungs- aufbau um 240s, das kann nicht gewollt sein.
/usr/sbin/sendmail -q &
Falls das sleep den sendmail-Aufruf verzoegern soll: besser ist "( /bin/sleep 240 ; /usr/sbin/sendmail -q ) &". Man kann auch noch den ssh-Aufruf mit in die Klammer nehmen.
;; [...]
Jochen
Jochen Roedenbeck wrote:
Rolf Hillen wrote:
[...] case "$BASENAME" in ip-up.local) ssh -l username -n -f -L 12345:localhost:25 ldv39.uni-trier.de
In Scripts sollte man immer den Pfad der Programme mit angegeben, so auch hier. Also nicht nur "ssh", sondern "/usr/bin/ssh".
Der ssh-Aufruf klappt doch einwandfrei - daher gehe ich davon auf, daß ssh im Pfad ist. Aber der Sache nach hast Du natürlich Recht:-).
sleep 240
Und diesen Befehl sollte man hier meiden, er vrzoegert den Verbindungs- aufbau um 240s, das kann nicht gewollt sein.
Wahrscheinlich ist das in der Mail durch einen Zeilenumbruch nicht richtig rübergekommen: sleep wird auf der anderen Kiste per ssh remote aufgerufen und sorgt dafür, daß der ssh-tunnel 240 Sekunden aufrechterhalten wird - i.d.R. genug Zeit, um die Mail zu versenden. Es gibt also keine Verzögerung beim Aufruf von Sendmal. Wenn das mit dem killen klappt, wollte ich den eigentlich auf quasi unendlich setzen - für den Fall, daß ich sendmail -q später noch mal explizit aufrufe. -- Gruesse Rolf
Rolf Hillen wrote:
Hallo,
nachdem ich in suse-linux keine Antwort bekommen habe, hoffe ich, daß
Warum wohl?
mir hier jemand helfen kann:
Schaung ma amoi.. [...]
----------------------------- abgespeckte /etc/ppp/ip-down.local: #!/bin/sh BASENAME=`basename $0` case "$BASENAME" in ip-up.local) ssh -l username -n -f -L 12345:localhost:25 ldv39.uni-trier.de
schreib doch die pid von ssh in eine Datei...
sleep 240 /usr/sbin/sendmail -q & ;; ip-down.local)
... und lies sie hier wieder aus
echo `/bin/ps aux | /usr/bin/grep '12345.*ldv39' | /usr/bin/awk '{ print $2;}'`
aechz ;-) das ist nun auch schon ne FAQ.. Wohin soll den print bzw. echo ausgeben? ip-down.local hat kein Terminal. Also Ausgabe umleiten >/dev/console oder in eine Datei (IMHO in diesem Falle sinnvoller.)
kill -9 `/bin/ps aux | /usr/bin/grep '12345.*ldv39' | /usr/bin/awk '{ print $2;}'` echo `/bin/ps aux | /usr/bin/grep '12345.*ldv39' | /usr/bin/awk '{ print $2;}'` ;; *) ;;
-- so long... bernd ------------------------------------------------------------------------
participants (4)
-
Illuminatus@t-online.de
-
Jochen Roedenbeck
-
Leopold Toetsch
-
Rolf Hillen