Utrzymywanie aplikacji Java działającej, gdy SSH jest zamknięty w Google Cloud

12

Obecnie uruchamiam aplikację Java przez SSH-ing na maszynie wirtualnej w Google Cloud Compute. Wydaję polecenie, aby uruchomić aplikację i ładuje konsolę. Gdy tylko zakończę połączenie SSH, aplikacja zostanie wyłączona. Zakładam, że dzieje się tak, ponieważ konsola została zamknięta.

Chciałbym, aby ta aplikacja (która jest serwerem) utrzymywała się po zakończeniu SSH, i w dowolnym momencie chciałbym móc ponownie połączyć się z konsolą i wydawać polecenia na serwerze.

Noahb32
źródło

Odpowiedzi:

15

Stwierdzasz to:

Chciałbym, aby ta aplikacja (która jest serwerem) utrzymywała się po zakończeniu SSH, i w dowolnym momencie chciałbym móc ponownie połączyć się z konsolą i wydawać polecenia na serwerze.

Nieco nieprecyzyjne cele, ale zrobię to nożem!

Aby uruchomić dowolną komendę jako proces działający w tle na serwerze Linux, należy wcześniej wstawić komendę nohupi dopisać &do końca.

Zatem ostatecznym poleceniem byłoby:

nohup [your command] &

Te nohupśrodki powinny ignorować polecenia „hang ups” i znaku handlowego &dołączone do niego jest polecenie powłoki, który informuje system, aby uruchomić polecenie jako proces w tle. Więcej informacji na temat jego wykorzystania można znaleźć tutaj .

Gdy uruchomisz takie polecenie, proces się uruchomi, zostaniesz odesłany z powrotem do wiersza polecenia i możesz wyjść z sesji terminalu lub nawet przejść i zrobić coś innego, niezwiązanego z tym poleceniem podczas tej sesji terminalu.

JakeGould
źródło
1
Jak mam to zrobić, jeśli chcę wrócić do procesu i wprowadzić polecenie w konsoli Java?
Noahb32,
1
@ Noahb32 Cóż, uruchomiłoby to jako proces w tle; Najczęściej używam tej metody, aby po prostu uruchomić proces, a potem go zapomnieć. Jeśli chcesz uruchomić nową konsolę Java, możesz to zrobić, ponieważ jesteś z powrotem w powłoce. Ale może powinieneś sprawdzić screenzamiast tego, ponieważ pozwala ci wrócić do sesji po uruchomieniu. Szczerze mówiąc, twoje pytanie jest bardzo niejasne, więc jeśli możesz je wyjaśnić, może to pomóc w wyjaśnieniu.
JakeGould,
1
Dziękuję Ci! Chciałbym dodać, że możesz monitorować wyjście z innego terminala: po prostu uruchom tail -f nohup.outtę samą pracę. reż.
naXa,
3

Istnieją co najmniej trzy sposoby: nohup(„bez rozłączania się”), screen/ tmuxlub disown. Pytanie, które musisz połączyć z serwerem i wejść w interakcję z demonem po rozłączeniu, jest trochę niejasne.

Jeśli tak jest, nohupi disownnie będzie to dobre dopasowanie, gdy zwalniasz proces (chociaż nadal działa). tmux(a także screen) utrzyma termin, nawet jeśli ty.

Aby uzyskać więcej informacji, zobacz odpowiednie strony:

man nohup
man tux

Bash disown (zakładając, że używasz Bash, chociaż wiele innych powłok zawiera coś podobnego)

użytkownik1794469
źródło
Wygląda na to, że disownw Google Cloud nie ma polecenia, przynajmniej instancja, której używam, rozpoczęła się w 2019 lub pod koniec 2018 roku. nohupPolecenie działa dobrze, ale tworzy dodatkowy plik, który może nie być potrzebny.
trysis
1

Aby odłączyć aplikację od działającej powłoki, sprawiając, że będzie ona utrzymywać się po zamknięciu powłoki, użyj nohuppolecenia.

Po prostu poprzedza się normalnym poleceniem nohupi powinno ono działać.

Julie Pelletier
źródło
0

Również jeśli nohub nie działa, możesz użyć screena :

 ssh into your remote box. 

wpisz ekran Następnie rozpocznij pożądany proces.

Press Ctrl-A then Ctrl-D. 

Spowoduje to odłączenie sesji ekranu, ale pozostawi procesy uruchomione. Możesz teraz wylogować się ze zdalnego skrzynki.

If you want to come back later, log on again and type screen -r This will resume your screen session, and you can see the output

z

twój proces.

bluejayke
źródło