Jaki jest najlepszy sposób na uruchomienie zdalnego polecenia ssh w tle, ale nadal wyświetlane?

15

Muszę uruchomić polecenia SSH zdalnie, a dane wyjściowe są wyświetlane lokalnie. Ale jeśli połączenie zostanie zerwane, chcę, aby polecenie nadal działało.

Nie mówię tak dużo o logowaniu i wykonywaniu, ale robieniu ssh user @ remotehost 'command && command etc'

Jak mogę się upewnić, że polecenie działa, nawet jeśli połączenie zostanie zerwane?

vfclists
źródło

Odpowiedzi:

27

Najlepszym sposobem na to jest użycie screena, który utrzymuje sesję otwartą w trwały sposób, nawet jeśli połączenie screen -rzostanie przerwane (a jeśli chcesz zacząć z niego korzystać ponownie, możesz to zrobić i otworzy się ono ponownie).

Prefiksowanie dowolnego polecenia, które chcesz uruchomić screen(np. ssh -t user@host screen command) Powinno wykonać zadanie.

Jeśli chcesz, aby działał w tle powłoki, możesz również dołączyć &do niej całą.

Falcon Momot
źródło
Prawdopodobnie będziesz musiał użyć ssh -t, aby przydzielić terminal do uruchomienia komendy. W przeciwnym razie błąd brzmi „Musi być podłączony do terminala”.
bonsaiviking
11

Czy chcesz mieć trwałą sesję, którą możesz wznowić, czy po prostu powstrzymać rozłączenie się przed zabiciem ekscytacji?

W pierwszym przypadku zastosowania screen, w tym drugim nohup.

Shane Madden
źródło
7

Jak wspomniano wcześniej, screenmożna zrobić wszystko. Ale nie tylko to, czego potrzebujesz. Używam ekranu od lat i teraz używam go przy każdym logowaniu do systemów. Spróbuj zainstalować screeni utworzyć za ~/.screenrcpomocą takiej konfiguracji:

sessionname     vcflists
startup_message off
deflogin        off
vbell           off
msgminwait      0
msgwait         10
log             off
backtick        1 0 0 hostname
caption splitonly "%?%F%{= yk}%:%{= Kk}%? %n %t%="
hardstatus alwayslastline "%{= rY}  %1`  %{= kg} %0c %{= bY}  %-w%{= Yk} %n %t %{-}%+w %=%{g}%l "

Potem biegnij screen -Rd vcf. Jest to preferowane wywołanie screena. Ponownie połączysz się z poprzednio utworzoną sesją o nazwie vcf * (lub zostaniesz ostrzeżony, jeśli niejednoznaczny) lub, jeśli sesja jeszcze się nie otworzy, zostanie utworzona. CTRL+ Ato meta-klucz, który robi wszystko. CTRL+A C( CTRL+ A, a następnie C) utwórz nowe okno (ekran) w sesji. CTRL+A SPACEprzenieś fokus do następnego okna w rundzie. CTRL+A Dodłączyć bieżącą sesję, zachowując funkcjonalność wszystkich okien między połączeniami. Jeśli masz uruchomione jakieś długie zadanie, możesz odłączyć od ekranu i podłączyć je później, aby zobaczyć, co się stanie. To samo dzieje się, jeśli stracisz sesję ssh - ekran pozostanie przy życiu przy wszystkich otwartych oknach i uruchomionych zadaniach.

Jeśli chcesz zamknąć okno wewnątrz ekranu - po prostu exitz jego powłoki. Jeśli chcesz zamknąć wszystkie powłoki / zadania we wszystkich oknach i wyjść z ekranu - po prostu naciśnij CTRL+A CTRL+\i naciśnij „Y”, gdy zostaniesz o to poproszony.

Dla całej reszty patrz ekran człowieka.

Kondybas
źródło
2

Widziałem tę alternatywę dla niezawodnego połączenia „jak” ssh:

http://mosh.mit.edu/

Rodrigo Prior Bechelli
źródło
Z witryny mosh (mobilna powłoka) wygląda jak obiecujące nowe narzędzie. Jest jednak bardzo nowy.
bgvaughan
1

Zazwyczaj robiłbym:

nohup mycommand &

tail -f nohup.out
gin
źródło