Jak uruchomić skrypt przez SSH, który nie kończy się po zamknięciu połączenia?

18

Muszę uruchomić skrypt, którego wykonanie zajmuje dużo czasu, lub po prostu chcę, aby działał wiecznie. Nie mogę po prostu SSH do mojego komputera, ponieważ po odłączeniu przestaje działać.

Czy jest jakiś sposób na uruchomienie skryptu, który nie zależy od powłoki, która go uruchomiła?

Używam Ubuntu 9.04.

Jakub Arnold
źródło

Odpowiedzi:

24

Możesz uruchomić polecenie za pomocą polecenia nohup przed nim. Możesz także uruchomić go na „ekranie”, co pozwoli ci ponownie podłączyć terminal.

Na przykład:

ssh mySever 'nohup bash myscript.sh'

Lub po prostu ssh i uruchom polecenie nohup. Powinien on działać nawet po rozłączeniu. Wynika to z tego, że nohup przechwyci singiel SIGHUP (rozłączenie).

Ekran jest nieco bardziej zaangażowany, ale przez 20 minut może zająć Ci zapoznanie się z podstawami, jest to jedno z najbardziej przydatnych narzędzi. Oto samouczek .

Kyle Brandt
źródło
Sniped by Kyle ...> smile <
Evan Anderson
+1 dla każdego, kto zastrzelił Evana. Happy 10K :)
squillman
1
link do samouczka jest zepsuty :(
Ido Ran
7

Zawsze używam tylko nohup. Jeśli zależy mi na wyjściu, przekierowuję go do pliku dziennika, w przeciwnym razie wysyłam go do / dev / null.

Przykład:

nohup scp file.tar.gz root@someserver:/var/tmp > /dev/null 2>&1 &

To umieszcza go w tle, z wyjściem idącym do / dev / null, i jest odporny na sygnał HUP, jeśli się wylogujesz. Możesz także „odrzucić” zadanie za pomocą niektórych powłok (np. Bash), aby nie było ono połączone z twoją sesją.

disown %1
m0j0
źródło
1
+1 za odrzucenie - bardzo przydatne, gdy zapomnisz uruchomić za pomocą nohup
Mark
5

Aby zainstalować ekran: apt-get install screen

Następnie uruchom za pomocą: screen

I man screenuzyskać kluczową moc.

Dyskoteka
źródło
+1! ekran jest rzeczą!
Javier
Kiedyś używałem screena, ale z różnych powodów przełączyłem się na tmux. Google „Tmux vs screen”, a znajdziesz kilka takich linków: superuser.com/questions/236158/tmux-vs-screen
m0j0
2

Po zalogowaniu się na serwerze możesz uruchomić skrypt w trybie odłączonym, wykonując następujące polecenie:

nohup script >script.out 2>script.err &

Później, gdy zalogujesz się ponownie, możesz sprawdzić skrypt.out dla dowolnego wyniku i skrypt.err dla komunikatów o błędach. Jeśli chcesz, aby komunikaty wyjściowe i komunikaty o błędach znajdowały się w tym samym pliku, wykonaj następujące czynności:

nohup script >script.out 2>&1 &
Michael Dillon
źródło