Иногда у меня есть долго запущенные процессы, которые я хочу запустить перед тем, как идти домой, поэтому я создаю SSH-сеанс на сервере, чтобы запустить процесс, но затем я хочу закрыть свой ноутбук и пойти домой, а позже, после ужина, я хочу проверьте процесс, который я начал перед уходом с работы. Как я могу сделать это с SSH? Насколько я понимаю, если вы разорвете SSH-соединение, вы также прервете сеанс входа в систему на сервере, что приведет к остановке длительного процесса.
command-line
ssh
process
gnu-screen
Йонас Гораускас
источник
источник
nohup
перехватывает SIGHUP, так что когда запущенная оболочка завершает работу и отправляет SIGHUP всем своим все еще работающим дочерним элементам,long-running-process
не умирает.disown
просто удаляет указанное задание из дочернего списка Bash, чтобы он вообще не пытался отправить SIGHUP.nohup
это программа, отдельная от оболочки, поэтому она работает со всеми оболочками, тогдаdisown
как встроена в Bash.nohup
принимает команду для запуска, тогда какdisown
работает только после того, как задание запущено, и вы сделали его фоновым, чтобы вы могли вернуться в оболочку.tail -f nohup.out
чтобы проверить, что происходит, когда ты вернешься.Вы хотите использовать GNU Screen. Это супер круто!
CTRL+ a, dчтобы оторваться от вашего экрана сессии
Когда вы вернетесь к своему ноутбуку:
Тогда проверьте прогресс вашего длительного процесса!
screen
это очень всеобъемлющий инструмент, и может сделать гораздо больше, чем я описал. Во время сеанса экрана попробуйте ctrl + a,? выучить несколько общих команд. Вероятно, наиболее распространенными являются:screen -d -r
чтобы убедиться, что если к моему экранному сеансу подключена другая оболочка, она будет отключена, прежде чем я возобновлю ее в моей текущей системе.источник
screen -S name
и позвольте другому другу подключиться к немуscreen -x name
.tmux
withtmuxinator
- отличное сочетание для модных установок, а я предпочитаюscreen
быстрое и простое решение.Если вы не запланировали заранее, не настроили
screen
и т. Д., Просто сделайте следующее:Если ваш процесс работает в фоновом режиме: перейдите к # 3, иначе:
Ctrl-Z
приостановить процесс переднего плана. Это сообщит о задании № приостановленного процесса, например:Отправить
processName
в фон сbg %1
(используя все, что задание # следует за%
). Это возобновитсяprocessName
в фоновом режиме.Отказаться
processName
отdisown %1
илиdisown PID
. Используйте-h
флаг, если вы хотите сохранить право собственности, пока не прекратите свою текущую оболочку.источник
&
когда начал. Кажется, это отлично работает!То, что вы хотите использовать, это экран или, что еще лучше, удобная оболочка вокруг экрана, которая называется byobu.
Экран позволяет запускать несколько сеансов виртуального терминала в одном сеансе SSH. А учебник и справочные страницы доступны.
byobu - это обертка, которая позволяет легко открывать новые экраны с помощью простой функциональной клавиши вместо комбинации клавиш ctrl-a. Он также показывает строку состояния со всеми открытыми виртуальными терминалами, которые могут быть названы.
Еще одна приятная особенность заключается в том, что весь ваш экран может работать, пока ваше ssh-соединение отключено. Вы просто подключаетесь снова через ssh и вызываете byobu, и все как раньше.
Напоследок несколько скриншотов по бёбу.
источник
Стоит отметить, что
ssh -t lala screen -rxU moo
прикреплю к сеансу мула на принимающей лалеssh -t lala screen -S moo
создаст сеанс moo на хосте lalaа также
ssh -t lala screen -S moo quux
создаст сеанс moo на хосте lala и запустит программу quux , завершив сеанс по завершении.источник
Старый вопрос, странно, еще никто не советовал tmux , который действует как обертка для n консолей и держит их открытыми до тех пор, пока не понадобится. Это дает больше контроля, помимо ряда функций, которые имеет tmux. Управлять им легко, вы просто запускаете tmux, который переносит вас в его оболочку, запускают задание looong, затем нажимаете ctrl + b, затем d (detach) (
ctrl+b
это «ок google» в tmux иd
команда закрытия). без выхода из оболочки). Это на самом деле работает, если вы просто закроете, например, шпаклевку. После ужина, когда вы снова подключитесь, вы можете снова открыть tmux,tmux attach
чтобы видеть ваш экран точно так же, как вы ушли. Что-то, что я люблю, это разделение панели,ctrl+b
а затем нажмите"
. Чтобы перейти с одной панели на другую,ctrl+b
а затем нажмите стрелку вверх / вниз.источник
Вы можете найти хорошее руководство здесь: продолжайте сеанс SSH, когда вы отключаетесь
Теперь вы можете начать новый сеанс экрана, просто набрав screen в командной строке. Вам будет показана некоторая информация об экране. Нажмите Enter, и вы будете в обычном режиме.
Чтобы отключить (но оставить сеанс запущенным), нажмите « Ctrl+», Aа затем « Ctrl+» Dсразу. Вы увидите сообщение [отделено]
Чтобы подключиться к уже запущенному сеансу
Чтобы повторно подключиться к существующему сеансу или создать новый, если ни один не существует
Чтобы создать новое окно внутри сеанса работающего экрана, нажмите « Ctrl+», Aа затем Cсразу. Вы увидите новый запрос.
Чтобы переключиться с одного окна экрана на другое, нажмите « Ctrl+», Aа затем « Ctrl+» Aподряд.
Для просмотра списка открытых окон нажмите « Ctrl+», Aа затем Wсразу
источник
<kbd>Ctrl</kbd>
для отображения имен в качестве клавиш клавиатуры.Я использую NX NoMachine, который бесплатен для меня, потому что это только я. По сути, он запускает сеанс X на сервере, к которому вы можете подключаться и отключаться снова и снова. X сессия продолжается, когда вы не подключены. Соединения могут быть сделаны из любого места. Вы можете выбирать между плавающими окнами или одним окном, содержащим весь рабочий стол (например, полный рабочий стол Gnome). Клиент (который вы запускаете на своем ноутбуке) может быть запущен в Linux, MacOS, Solaris или Microsoft Windows. В последнем случае, если вы выбираете плавающие окна, они отображаются отдельно на панели задач Windows.
Я использую свой ноутбук с Windows XP (который мне нужен для определенного оборудования, специфичного для Windows) в качестве внешнего интерфейса для двух моих серверов Linux, использующих NX Nomachine. Я даже могу печатать на принтере, подключенном к моему ноутбуку с Windows из Linux.
источник