Сохраните процессы, бегущие за разъединениями сессии SSH

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

210
23.01.2020, 22:07
6 ответов

Использовать nohup заставить Ваш процесс проигнорировать сигнал зависания:

$ nohup long-running-process &
$ exit
211
27.01.2020, 19:27
  • 1
    Это - это. Никакая потребность установить экран или tmux. Это - на самом деле старый добрый способ сделать это. Верный 'экран' или 'tmux' являются и wonderous приложениями и должны использоваться при необходимости, но столь же простой как выполнение процесса в фоновом режиме, которого можно выйти из системы, пойдите для вышеупомянутого. –  reiche 14.08.2010, 14:40
  • 2
    является nohup, любят, отрицают? –  cjac 15.08.2010, 12:12
  • 3
    псевдонима у Них есть подобные цели, но они отличаются во многих отношениях. nohup SIGHUP прерываний так, чтобы, когда оболочка, которая выполнила его, выходит и отправляет SIGHUP всем своим все еще рабочим детям, long-running-process не умирает. disown просто удаляет указанное задание из дочернего списка Bash, таким образом, это не попытается отправить SIGHUP вообще. nohup программа, отдельная от оболочки, таким образом, она работает со всеми оболочками, тогда как disown встроенный Bash. nohup принимает, что команда работает, тогда как disown только работы после задания запускаются, и у Вас есть фон оно так, можно возвратиться к оболочке. –  Warren Young 15.08.2010, 17:00
  • 4
    Потрясающий быстрый обзор для тех, кто незнаком с nohup и отрицает - а также некоторые простые способы иметь дело с терминальными сеансами serverwatch.com/tutorials/article.php/3935306 / … –  Dan 13.08.2014, 00:58
  • 5
    tail -f nohup.out проверять, что продолжается, когда Вы вернулись. –  Ricardo Stuven 03.11.2016, 17:15

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

ssh me@myserver.com
screen               #start a screen session
run-a-long-process

CTRL+a, d для отсоединений от экранной сессии

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

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

ssh me@myserver.com
screen -r            #resume the screen session

Затем проверьте прогресс своего продолжительного процесса!

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

  • CTRL+a, c для создания нового окна
  • CTRL+a, n для переключения на следующее окно на экранной сессии
  • CTRL+a, p для переключения на предыдущее окно на экранной сессии
  • если Вы входите в систему от набора различных систем, Вы, возможно, случайно оставили себя присоединенными к активной экранной сессии на другом компьютере. по этой причине я всегда возобновляюсь с screen -d -r гарантировать, что, если другая оболочка присоединена к моей экранной сессии, это будет отсоединено, прежде чем я возобновлю его на своей существующей системе.
141
27.01.2020, 19:27
  • 1
    tmux является современным аналогом экрана. –  zvolkov 14.08.2010, 05:21
  • 2
    , который я не знаю о современном, но ключевом префиксе по умолчанию tmux (Ctrl + b) помогает, если Вы привыкли к bash/emacs ключам. –  sajith 14.08.2010, 07:15
  • 3
    довольно прохладен, если Вы хотите общий терминал по некоторым причинам. Создайте экран screen -S name и позвольте своему другому другу соединиться с ним с screen -x name. –  Patrick 06.10.2010, 12:23
  • 4
    tmux с tmuxinator большая комбинация для необычных установок, в то время как я предпочитаю screen как быстрое и простое решение. –  earthmeLon 19.06.2014, 18:31
  • 5
    Этот ответ является лучшим.. Мне нравится он. Превосходное исследование –  Jaffer Wilson 07.01.2017, 14:30

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

Экран позволяет Вам выполнять несколько сессий виртуального терминала на той же ssh сессии. Учебное руководство и страницы справки доступны.

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

Другой хорошей функцией является то, что весь Ваш экран может не лечь спать, в то время как Ваше соединение SSH разъединяется. Вы просто соединяетесь снова через ssh и называете byobu, и все похоже прежде.

Наконец некоторые снимки экрана byobu.

15
27.01.2020, 19:27
  • 1
    я запустил процесс на своем сервере в Терминале Byobu, действительно не зная то, чем это было (я просто искал Терминал и нажал на Byobu, потому что я никогда не видел его прежде). Я продолжал использовать Byobu, потому что он имел красочную строку состояния внизу, и я думал, что это было прохладно. Сегодня я желал для доступа к тому терминальному сеансу удаленно через SSH. Все, что я должен был сделать, было ввести "byobu", и он показал тот терминальный сеанс сразу же. Действительно счастливый я споткнулся через byobu! –  nick 10.03.2015, 22:13

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

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

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

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

42
27.01.2020, 19:27
  • 1
    Спасибо за это! Я имел выполнение задания и думал, что не собирался быть способным сохранить его движением, потому что я не использовал & когда я запустил его. Это, кажется, работает отлично! –  Matt 25.03.2012, 18:42
  • 2
    Это удивительно! Я никогда не знал, что Linux мог позволить Вам передать управление активных процессов как это. Я боялся, что моя батарея перестанет работать, в то время как SSH'ing в мой сервер посреди длительного процесса, и это было ответом для меня! –  Pluto 21.05.2014, 00:05

Могло бы стоить отметить это

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

ssh -t lala screen -S moo создаст сессию мычания на хосте lala

и

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

9
27.01.2020, 19:27

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

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

2
27.01.2020, 19:27