it-swarm-ru.tech

Поддерживайте процессы, запущенные после отключения сеанса SSH

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

216
λ Jonas Gorauskas

Используйте Nohup, чтобы ваш процесс игнорировал сигнал зависания:

$ Nohup long-running-process &
$ exit
217
Warren Young

Вы хотите использовать экран GNU. Это супер круто!

ssh [email protected]
screen               #start a screen session
run-a-long-process

CTRL+a , d оторваться от вашего сеанса экрана

exit                 #disconnect from the server, while run-a-long-process continues

Когда вы вернетесь к своему ноутбуку:

ssh [email protected]
screen -r            #resume the screen session

Тогда проверьте прогресс вашего длительного процесса!

screen - это очень всеобъемлющий инструмент, который может сделать намного больше, чем я описал. Во время сеанса экрана попробуйте ctrl + a,? выучить несколько общих команд. Вероятно, наиболее распространенными являются:

  • CTRL+a , c создать новое окно
  • CTRL+a , n переключиться на следующее окно в вашем сеансе экрана
  • CTRL+a , p переключиться на предыдущее окно вашего сеанса экрана
  • если вы входите в систему из разных систем, вы можете случайно остаться подключенными к активному сеансу экрана на другом компьютере. по этой причине я всегда возобновляю с screen -d -r, чтобы гарантировать, что если к моему экранному сеансу присоединится другая оболочка, она будет отключена, прежде чем я возобновлю ее в моей текущей системе.
143
Sandy

Если вы не запланировали заранее и не настроили screen и ​​т.д., Просто сделайте следующее:

  1. Если ваш процесс работает в фоновом режиме: перейдите к # 3, иначе: Ctrl-Z приостановить процесс переднего плана. Это сообщит о задании № приостановленного процесса, например:

    [1]+  Stopped                 processName
    
  2. Отправьте processName на задний план с помощью bg %1 (используя то, что задание # следует за %). Это возобновит processName в фоновом режиме.

  3. DisownprocessName с disown %1 или disown PID. Использовать -h помечать, если вы хотите сохранить право собственности до тех пор, пока вы не прекратите работу своей текущей оболочки.

42
Mike Covington

То, что вы хотите использовать, это экран или, что еще лучше, удобная оболочка вокруг экрана, которая называется byobu.

Экран позволяет запускать несколько сеансов виртуального терминала в одном сеансе SSH. A учебник и страницы справки доступны.

byob - это оболочка, которая позволяет легко открывать новые экраны с помощью простой функциональной клавиши вместо комбинации клавиш из ctrl-a. Он также показывает строку состояния со всеми открытыми виртуальными терминалами, которые могут быть названы.

Еще одна приятная особенность заключается в том, что весь ваш экран может работать, пока ваше ssh-соединение отключено. Вы просто подключаетесь снова через ssh и вызываете byobu, и все как раньше.

Наконец-то скриншоты byobu.

15
txwikinger

Стоит отметить, что

ssh -t lala screen -rxU moo присоединится к сеансу moo на хосте lala

ssh -t lala screen -S moo создаст сеанс moo на хосте lala

а также

ssh -t lala screen -S moo quux создаст сеанс moo на хосте lala и запустит программу quux, завершив сеанс по завершении.

9
cjac

Хорошее руководство можно найти здесь: продолжайте сеанс SSH при отключении

Sudo apt-get install screen

Теперь вы можете начать новый сеанс экрана, просто набрав screen в командной строке. Вам будет показана некоторая информация об экране. Нажмите Enter, и вы получите обычный запрос.

Чтобы отключиться (но оставить сеанс запущенным) Нажмите Ctrl + A а потом Ctrl + D в немедленной последовательности. Вы увидите сообщение [отделено]

Для повторного подключения к уже запущенному сеансу

screen -r

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

screen -D -r

Чтобы создать новое окно внутри сеанса рабочего экрана Нажмите Ctrl + A а потом C в немедленной последовательности. Вы увидите новую подсказку.

Для переключения с одного экрана на другое Нажмите Ctrl + A а потом Ctrl + A в немедленной последовательности.

Для отображения списка открытых окон Нажмите Ctrl + A а потом W сразу

4
Victor Hugo Arango A.

Старый вопрос, странный еще никто не советовал tmux , который действует как обертка для n консолей и держит их открытыми до тех пор, пока они не понадобятся. Это дает больше контроля, помимо ряда функций, которые имеет tmux. Управлять им легко, вы просто запускаете tmux, который переносит вас в оболочку, запускают задание looong, затем нажимаете ctrl + b, а затем d (detach) (ctrl+b "ok google" для tmux, а d - команда для закрытия без выхода из командной консоли). Это на самом деле работает, если вы просто закройте, например, PuTTY. После ужина, когда вы снова подключитесь, вы можете снова открыть tmux с помощью tmux attach чтобы видеть ваш экран точно так же, как вы ушли. Что-то, что я люблю, это разделение панели: ctrl+b и ​​затем нажмите ". Чтобы перейти с одной панели на другую, ctrl+b и ​​затем нажмите стрелку вверх/вниз.

4
nnsense

Я использую NX NoMachine, который бесплатен для меня, потому что это только я. По сути, он запускает X-сеанс на сервере, к которому вы можете подключаться и отключаться снова и снова. X сессия продолжается, когда вы не подключены. Соединения могут быть сделаны из любого места. Вы можете выбирать между плавающими окнами или одним окном, содержащим весь рабочий стол (например, полный рабочий стол Gnome). Клиент (который вы запускаете на своем ноутбуке) может работать на Linux, MacOS, Solaris или Microsoft Windows. В последнем случае, если вы выбираете плавающие окна, они отображаются отдельно на панели задач Windows.

Я использую свой ноутбук с Windows XP (который мне нужен для определенного оборудования для Windows)) в качестве внешнего интерфейса для двух моих серверов Linux, использующих NX Nomachine. Я даже могу печатать на принтере, подключенном к мой ноутбук с Windows от Linux.

2
Rob_before_edits

Tmux - хороший вариант, доступный для запуска ваших длительных процессов в фоновом режиме.

Я должен продолжать запускать долго работающие процессы на облачной платформе Google VM экземпляр/сервер (с ОС: Ubuntu 16.0). Где я должен запустить терминал SSH и с терминала, у меня есть чтобы терминал оставался подключенным для запуска процесса. Теперь до этого все хорошо. Но подождите, если соединение с моим терминалом SSH будет прервано, тогда долго работающие процессы немедленно прекратятся, и, следовательно, я должен повторно запустить их еще раз терминал ssh перезапускается или с нового терминала ssh.

Я считаю, что tmux является хорошим решением, позволяющим избежать завершения процессов, которые мы хотим запустить, даже после закрытия терминала.

Терминальный мультиплексор (tmux) для запуска сеанса tmux:

  1. Запустите терминал ssh
  2. Введите tmux. Откроется окно в том же терминале.
  3. Запустите команду, чтобы запустить долго выполняющиеся процессы в сеансе tmux.

Теперь, даже если SSH-терминал внезапно закрывается/завершается, сеанс tmux продолжит запуск запущенных процессов, запущенных дольше, на экземпляре/сервере.

Если соединение разорвано, то как его восстановить, чтобы увидеть процессы, запущенные в сеансе tmux в фоновом режиме:

  1. переподключите или откройте новый терминал ssh. Чтобы увидеть этот процесс (который работает в фоновом режиме), введите: tmux attach команда.

Хотите прекратить сеанс tmux:

  1. Останови процесс. Затем введите exit в tmux-терминал-окно.

(Обратите внимание: если мы используем tmux detach команда: она выйдет из окна/терминала сеанса tmux без завершения/остановки сеансов tmux)

Для более подробной информации, пожалуйста, обратитесь к следующей статье:

  1. https://www.tecmint.com/keep-remote-ssh-sessions-running-after-disconnection/
  2. https://limitlessdatascience.wordpress.com/2019/08/22/tmux-to-keep-jupyter-notebook-running-in-the-background/
1
Yogesh