Chcę wykonać skrypt start.sh
na zdalnym serwerze, który uruchamia to:
nohup node server.js &
Naiwnie nazywam SSH w ten sposób:
ssh myserver <<EOF
./start.sh &
EOF
To uruchamia skrypt, ale pozostawia połączoną sesję. Chcę wykonać ten krok z innymi poleceniami w skrypcie, więc to nie jest dobre.
Jak mogę SSH do zdalnego komputera, uruchomić nohup
polecenie w tle, a następnie się rozłączyć? Podejrzewam, że mógłbym umieścić sam proces SSH w tle, ale to nie wydaje się właściwe.
źródło
> /dev/null
.> /dev/null 2>&1
do końca , to odrzucenie dowolnego wyjścia stdout / stderr poprzez przekierowanie do lol czarnej dziurynohup command2 >> /path/to/command2.log 2>&1 &
w terminalu, a następnie zamknę terminal, że proces zostanie utracony?Dlaczego nie po prostu tmux lub screen i skończyć z tym? Na przykład:
Jest to praktyczne, jeśli jest to coś, co będzie się zapętlać lub zajmie trochę czasu, aby zakończyć. Możesz rozłączyć się z sesją, która pozostanie aktywna.
źródło
nie działa w trybie demona, utrzymując sesję ssh połączoną. Sesja Ssh powróci za 10 sekund, mimo że użyłeś nohup.
Powodem jest to, że zdalne stdout i stderr nadal są podłączone do twojej sesji. Utrzymuje sesję ssh przy życiu, nohup nie pomaga.
To:
wraca natychmiast. Rozpoczyna zdalny proces od nohup i natychmiast kończy sesję ssh.
źródło
Krótsza forma:
Wygląda na to, że samo bash wykonuje odłączanie od terminala, więc nie jest potrzebne żadne działanie. Używam Ubuntu 14.04 x86_64, bash 4.3.11.
źródło
nohup;
po prostu wysyła skargę dotyczącą brakujących argumentów.command 1; command 2; ...
reprezentuje skrypt OP chcesz uruchomić. OP może również użyć specjalnego przypadku tej odpowiedzi:ssh myserver ./start.sh &>/dev/null &