Prozesse entfernt aufrufen und beenden

J

Junktyz

Grünschnabel
Hallo,

ich möchte auf mehreren Remote-PCs ein tcpdump machen und dieses dann auf meinem Rechner speichern. Dies mache ich folgendermaßen

Code:
rsh -l root 172.16.100.144 /usr/sbin/tcpdump host not 172.16.100.0 -c 1000 -w - > ./1.dump &

rsh -l root 172.16.96.0 /usr/sbin/tcpdump host not 172.16.100.0 -c 1000 -w - > ./2.dump &

Da die beiden tcpdumps parallel ablaufen sollen, starte ich sie im Hiontergrund. Ab dann habe ich aber keine Kontrolle mehr über sie, weshalb ich mit -c 1000 nur 1000 Pakete trace. Ich würde aber gerne, dass ich den tcpdump ohne das -c Argument starte und bei einem Tastendruck (oder einem anderen event) den tcpdump auf den remote PCs beende. Allerdings weiß ich nicht wie ich das machen soll.
Kann ich mir beim Starten des jeweiligen tcpdumps irgendwie die PID merken und über die dann später den Prozess beenden?
Oder gibt es eine andere Möglichkeit?
 
Ich glaube "screen" ist das was du suchst......
 
also, so wie sich das anhört möchtest Du alle tcpdumps gleichzeitig starten, sowie auch beenden. Versuchs mal mit clusterssh, das dürfte Dir schnell weiterhelfen und ist im Gegensatz zum rudimentären rsh, auch noch wesentlich sicherer. http://clusterssh.sourceforge.net

cheers
 
Das Problem ist, dass das System, auf dem das Skript läuft sehr minimalistisch ist und ic hdort auch keine zusätzliche Software installieren kann.

Ich habe mal folgendes ausprobiert. Mit fg hole ich mir ja einen job zurück. Wenn ich folgendes im Skript ausführe,
Code:
rsh -l root 172.16.100.144 /usr/sbin/tcpdump host not 172.16.100.0 -c 1000 -w - > ./1.dump &

fg $!

kommt die Fehlermeldung "./collect.sh: line 13: fg: no job control"

Eine andere Idee ist, später wieder mit einem rsh auf den Remote-PC zu gehen und den Prozess zu killen. Dazu bräuchte ich aber die Prozess ID vom entfernt aufgerufenen tcpdump, mit

Code:
rsh -l root 172.16.100.144 /usr/sbin/tcpdump host not 172.16.100.0 -c 1000 -w - > ./1.dump &

echo $!

bekomme ich aber leider nur die PID von rsh, was mir ja nichts bringt.

Hat jemand ne Lösung, wie ich an die PID von tcpdump komme?
 
Ich bin jetzt soweit, dass ich mir die pid vom entfernten tcpdump hole und dann später mit dem kill befehl den Prozess mit dieser pid kille.

Aber ich würde gerne folgenden Code ausführen, was es einfacher machen würde:

Code:
rsh -l root 172.16.100.144 kill $(pidof tcpdump)

Allerdings kommt da die Fehlermeldung:

kill: usage: kill [-s sigspec | -n signum | -sigspec] [pid | job]... or kill -l [sigspec]

Wenn ich mich aber mit telnet direkt auf den Rechner verbinde und da dann "kill $(pidof tcpdump)" ausführe, dann beendet er alle tcpdump-Befehle.

Weiß jemand wo der Fehler ist warum es mit rsh nicht funktioniert?
 
Hi,

Code:
rsh -l root 172.16.100.144 kill [b]\[/b]$(pidof tcpdump)

Ohne den Backslash wird Dein Subshell-Aufruf auf Deinem lokalen System gemacht. Du mußt das entsprechende Steuerzeichen (das Dollar-Zeichen) "escapen", damit der Aufruf über die rsh an das entfernte System übergeben wird, anstatt ihn lokal durchzuführen.
Eine andere Möglichkeit wäre, das ganze in Singlequotes (') zu packen, damit der darinliegende Subshellaufruf unverändert übertragen wird.

Gruß Daniel
 
Hi,



Ohne den Backslash wird Dein Subshell-Aufruf auf Deinem lokalen System gemacht. Du mußt das entsprechende Steuerzeichen (das Dollar-Zeichen) "escapen", damit der Aufruf über die rsh an das entfernte System übergeben wird, anstatt ihn lokal durchzuführen.
Eine andere Möglichkeit wäre, das ganze in Singlequotes (') zu packen, damit der darinliegende Subshellaufruf unverändert übertragen wird.

Gruß Daniel

Danke, jetzt funktioniert es. :).
 

Ähnliche Themen

Samba 4 Gast Zugang unter Ubuntu funktioniert nicht

Kein Internet mehr

NagiosGrapher 1.7.1 funktioniert nicht

Windows clients können nicht mehr auf lange laufendes System zugreifen

Rollei Mini Wifi Camcorder

Zurück
Oben