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.

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 .


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

1
+1 za odrzucenie - bardzo przydatne, gdy zapomnisz uruchomić za pomocą nohup
Mark


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 &
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.