Поддержание работы приложения Java, когда SSH закрыт в Google Cloud

12

Прямо сейчас я запускаю приложение Java, подключаясь к виртуальной машине через Google Cloud Compute. Я запускаю команду для запуска приложения, и оно загружает консоль. Как только я разрываю соединение SSH, приложение закрывается. Я предполагаю, что это потому, что консоль была закрыта.

Я хотел бы, чтобы это приложение (которое является сервером) сохранялось после завершения SSH, и в любой момент я хотел бы иметь возможность повторно подключиться к консоли и выполнять команды на сервере.

Noahb32
источник

Ответы:

14

Вы заявляете это:

Я хотел бы, чтобы это приложение (которое является сервером) сохранялось после завершения SSH, и в любой момент я хотел бы иметь возможность повторно подключиться к консоли и выполнять команды на сервере.

Немного расплывчато в целях, но я сделаю это!

Чтобы выполнить любую команду в качестве фонового процесса на сервере Linux, вы должны добавить команду к концу nohupи добавить &в конец.

Таким образом, последняя команда будет:

nohup [your command] &

В nohupозначает , что команда должна игнорировать «зависание окна» и амперсанда , &присоединенный к нему является командой оболочки , которая указует систему , чтобы запустить команду в качестве фонового процесса. Более подробную информацию о его использовании можно найти здесь .

Когда вы запускаете команду, подобную этой, процесс запускается, вы будете отправлены обратно в командную строку, и вы можете выйти из сеанса терминала или даже пойти и сделать что-то еще, не связанное с этой командой, во время этого сеанса терминала.

JakeGould
источник
1
Если я хочу вернуться к процессу и ввести команду в консоль Java, как бы я это сделал?
Noahb32
1
@ Noahb32 Ну, это запустит его как фоновый процесс; Я в основном использую этот метод, чтобы просто запустить процесс, а затем забыть его. Если вы хотите запустить новую консоль Java, вы можете просто сделать это, так как вернулись в оболочку. Но, возможно, вам следует изучить использование screenвместо этого, поскольку это позволяет вам вернуться в сессию после запуска. Честно говоря, ваш вопрос очень расплывчат, поэтому, если бы вы могли его прояснить, это могло бы помочь прояснить ситуацию.
JakeGould
1
Спасибо! Я хотел бы добавить, что вы можете контролировать вывод из другого терминала: просто запустите tail -f nohup.outв той же работе. реж.
NaXa
3

Есть как минимум три способа сделать это: nohup(«не вешай трубку»), screen/ tmuxили disown. Ваш вопрос немного неясен относительно необходимости подключения к серверу и взаимодействия с демоном после отключения.

Если это так, nohupи disownне будет хороших совпадений, когда вы выпускаете процесс (хотя он продолжает работать). tmux(а также screen) будет продолжать работать, даже когда вы.

Для получения дополнительной информации вы можете увидеть соответствующие страницы:

man nohup
man tux

Отказ Bash (при условии, что вы используете Bash, хотя во многих других оболочках есть нечто подобное)

user1794469
источник
Похоже, что disownв Google Cloud нет команды, по крайней мере, экземпляр, который я использую, запущен в 2019 или в конце 2018. Команда nohupработает нормально, но она создает дополнительный файл, который может быть не нужен.
trysis
1

Чтобы отсоединить приложение от запущенной оболочки и сохранить его после выхода из оболочки, используйте nohupкоманду.

Вы просто добавляете префикс к вашей обычной команде, nohupи она должна работать.

Джули Пеллетье
источник
0

Также, если nohub не работает, вы можете использовать screen :

 ssh into your remote box. 

Тип экрана Затем запустите нужный процесс.

Press Ctrl-A then Ctrl-D. 

Это отсоединит ваш сеанс экрана, но оставит ваши процессы запущенными. Теперь вы можете выйти из удаленного окна.

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

из

ваш процесс.

bluejayke
источник