Zachowaj procesy po wylogowaniu z SSH

5

Próbuję zmierzyć przepustowość, utratę pakietów, opóźnienia i jitter między dwoma komputerami w bezprzewodowym połączeniu sieciowym 802.11s.

Próbuję stworzyć (mój pierwszy) skrypt bash, który może wykonać następujące czynności:

  1. SSH na innym komputerze i rozpocznij rejestrowanie danych z usług ( ptpd, tcpdump, iperf ).
  2. Uruchom te same procesy na moim komputerze i rozpocznij rejestrowanie danych.
  3. Kiedyś iperf transmisja na moim własnym komputerze jest zakończona, powinna SSH do zdalnego komputera i zabić usługi.

Pomysł polega na tym, że te trzy kroki są uruchamiane w pętli for, która zwiększa rozmiar pakietu przesyłanego przez iperf dla każdej iteracji i rejestruje wynikowe dane.

Wiem, jak uruchomić proces na zdalnym komputerze przez ssh host@adress process.

Nie mam jednak pojęcia, jak uruchomić wiele procesów poprzez SSH i wylogować, ponieważ procesy są kończone po wylogowaniu. Spojrzałem na screen i nohup poleceń, ale nie wiem, jak ich używać w skrypcie.

Z góry dziękuję!

EDYTOWAĆ:

Dziękuję za całą dotychczasową pomoc.

Mam teraz do roboty, to było całkiem proste, jak zauważyli ludzie. Więc teraz mam: ssh host@adress nohup ./script.sh > /dev/null 2>&1 & w skrypcie na moim głównym komputerze. Spowoduje to uruchomienie skryptu na zdalnym komputerze, a następnie wylogowanie się z SSH. Następnym problemem jest wykonanie skryptu na zdalnym komputerze jako sudo, ponieważ jest to wymagane przez tcpdump.

Próbować ssh host@adress **sudo** nohup ./script.sh > /dev/null 2>&1 & nie działa.

Jakieś pomysły?

EDYCJA 2:

Jeśli ktoś utknął z tym samym problemem, znalazłem przewodnik, jak rozwiązać ten problem:

http://www.pantz.org/software/ssh/using_ssh_and_sudo_instead_of_root_for_remote_commands.html

Thomas
źródło

Odpowiedzi:

7

Posługiwać się screen.

Kilka przydatnych skrótów:

  • ctrl + a + c: utwórz nowe „okno”
  • ctrl + a + n: przejdź do następnego „okna”
  • ctrl + a + p: przejście do poprzedniego „okna”
  • ctrl + a + d: odłącz sesję (działa nadal)

Po odłączeniu użyj screen -r wznowić sesję. Jest także screen -x jeśli sesja na ekranie nie została odłączona, ale przeszła w tło w inny sposób (lub w rzeczywistości nadal działa na innym terminalu).

Ivan Vučica
źródło
5

Od --help na nohup;

Usage: nohup COMMAND [ARG]...
  or:  nohup OPTION
Run COMMAND, ignoring hangup signals.

Po prostu dodaj & dla Twojej nohup <whatever you want to run> dowództwo. Znaczy to, chyba że specjalnie zabijesz spawnowanego nohup proces, to nigdy nie odejdzie.

Możesz całkowicie pominąć Nohup screen lub tmux, co słyszę, spowoduje, że procesy będą działać, nawet jeśli połączenie ze zdalnym hostem jest martwe (co jest jedną z jego zalet). Nie wiem jednak, jak to zrobić, więc musisz zrobić własne czytanie man screen / man tmux po pobraniu.

qweet
źródło
2

Możesz dodać program za pomocą nohup.

Na przykład. nohup myprogram &. To uruchomi program i wyśle ​​całe wyjście do pliku o nazwie nohup.out. Będzie także przechwytywać sigHUP po wylogowaniu.

Innym rozwiązaniem jest uruchomienie screen lub tmux

Hennes
źródło
0

Odpowiedź jest w twoim pytaniu. Użyj screen lub nohup polecenia. Czego nie rozumiesz, jak z nich korzystać?

Próbować

ssh host@address nohup command args &. & Amp; stawia ssh powłoka w tle w systemie lokalnym, co oznacza, że ssh tunel pozostanie tak długo, jak będzie mógł. Ale nohup polecenie uniemożliwi command uruchomione na zdalnym systemie przed zakończeniem, jeśli z jakiegokolwiek powodu lokalny ssh proces kończy się lub traci połączenie ze zdalnym hostem.

allquixotic
źródło
PS: Musisz umieścić cudzysłów na poleceniu, które chcesz uruchomić (używam pojedynczych cudzysłowów na dobre), w przeciwnym razie wyśle ​​sesję ssh do tła, a nie do polecenia, które chcesz uruchomić.
qweet
Tak, mam teraz do roboty, to było całkiem proste, jak zauważyłeś. Teraz mam: host ssh @ adres nohup ./script.sh & gt; / dev / null 2> i 1 i. To uruchamia skrypt na zdalnym komputerze w porządku. Następnym problemem jest wykonanie skryptu na zdalnym komputerze jako sudo, ponieważ jest to wymagane przez tcpdump?
Thomas