Ich möchte ein paar Jobs auf verschiedenen Maschinen mit ssh starten. Wenn der Benutzer dann das Hauptscript unterbricht, möchte ich alle Jobs ordnungsgemäß herunterfahren.Starten eines Prozesses über SSH mit bash und dann töten es auf sigint
Hier ist ein kurzes Beispiel dafür, was ich versuche zu tun:
#!/bin/bash
trap "aborted" SIGINT SIGTERM
aborted() {
kill -SIGTERM $bash2_pid
exit
}
ssh -t remote_machine /foo/bar.sh &
bash2_pid=$!
wait
jedoch der bar.sh Prozess noch den Remote-Computer ausgeführt. Wenn ich dieselben Befehle in einem Terminalfenster mache, wird der Prozess auf dem entfernten Host beendet.
Gibt es eine einfache Möglichkeit, dies zu erreichen, wenn ich das Bash-Skript ausführen? Oder muss ich mich anmelden, um den Remote-Computer zu finden, den richtigen Prozess zu finden und ihn so zu töten?
edit: Scheint, wie ich mit der Option B gehen, die Tötung der remotescript durch eine andere SSH-Verbindung
Also nein, ich möchte wissen, wie ich die remotepid bekommen? Ich habe ein etwas entlang der Linien von versucht:
remote_pid=$(ssh remote_machine '{ /foo/bar.sh & } ; echo $!')
Dies gilt nicht, da es blockiert arbeiten.
Wie warte ich auf eine Variable zum Drucken und dann "Freigabe" eines Unterprozesses?
Haben Sie in Ihrem Remote-Skript eine Falle versucht? Vielleicht SIGHUP? –
Ich habe versucht, alle Signale zu fangen, die ich ohne Erfolg denken kann ... Ich denke, ich muss nur noch auf die Remote-Maschine ssh und führen Sie Kill auf das Skript, aber dann brauche ich die PID von der remote Prozess ... – getekha
Probier 'pkill' wenn das so ist, wirst du gehen. Roh, aber normalerweise effektiv. – bstpierre