Вопрос: Как сохранить процессы после завершения сеанса ssh?


Скажем, я запускаю кучу процессов из сеанса ssh. Можно ли завершить сеанс ssh, сохранив эти процессы на удаленной машине?


494
2017-10-21 12:09


Источник


Связанный: unix.stackexchange.com/questions/4004/... - Anton Tarasenko


Ответы:


Вы должны искать современные альтернативы, такие как tmux,

tmux превосходит screen по многим причинам, вот несколько примеров:

  • Windows может быть перемещена между сеансами и даже связана с несколькими сеансами
  • Окна можно разделить горизонтально и вертикально на панели
  • Поддержка цветных терминалов UTF-8 и 256
  • Сеансы можно контролировать из оболочки без необходимости вводить сеанс

Основные функции

Чтобы получить те же функции, что и в ответ рекомендуя screen, вам нужно будет сделать следующее:

  • ssh в удаленную машину
  • Начало tmux путем ввода tmux в оболочку
  • запустите процесс, который вы хотите запустить tmux сессия
  • оставить / отсоединить tmux сеанса, набрав Ctrl+б а потом d 

Теперь вы можете безопасно выйти из удаленного компьютера, ваш процесс будет продолжать работать внутри tmux, Когда вы вернетесь назад и хотите проверить статус своего процесса, вы можете использовать tmux attach прикреплять к tmux сессия.

Если вы хотите, чтобы несколько сеансов работали бок о бок, вы должны назвать каждый сеанс, используя Ctrl+б а также $, Вы можете получить список текущих сеансов, используя tmux list-sessions,

tmux может делать гораздо более сложные вещи, чем обрабатывать одно окно за один сеанс. Для получения дополнительной информации см. man tmux или страница tmux GitHub, В частности, здесь часто задаваемые вопросы об основных различиях между screen а также tmux,


580
2017-11-23 09:26



Использование @CraigM screen -x -r [screenname] или screen -rx для краткости, если у вас активен только один сеанс сеанса. Это позволяет прикрепить существующий экземпляр экрана. - Lekensteyn
Этот совет помог мне с той же проблемой, но я думаю, что она включает опечатку. Я уверен, что вам нужно ввести Ctrl-b а потом d для того, чтобы оставить / снять tmux сессия. Конечно, это имеет место для версии tmux на моем Ubuntu 12.04. - cxrodgers
Я сделал ошибку, следуя приведенным выше инструкциям. Я поделюсь им, если кто-то может попасть в ту же ошибку: я начал использовать tmux в оболочке моего собственного компьютера вместо оболочки удаленного компьютера. Нужно запустить tmux в оболочке удаленного компьютера. - Mert Nuhoglu
Экран теперь разрабатывается снова: lists.gnu.org/archive/html/screen-devel/2014-04/msg00024.html Не могли бы вы уточнить свой ответ? - muru
Альтернативно, запустите tmux detach вместо ввода ctrl-b d - Andrew MacFie


Лучший способ - это самый простой способ.

nohup long-running-command &

Это было сделано специально для этого, оно даже записывает stdout в nohup.log

man nohup

Если вы хотите «заложить» некоторые уже запущенные задачи, то ваш лучший выбор - ctrl + z, затем запустите

bg (это будет фоном вашей последней приостановленной задачи, позволяющей ей продолжать работать)

затем быстро disown должен поддерживать процесс после выхода из системы.

screen и другие могут это сделать, но это не то, для чего они нужны. я рекомендую nohup для задач, которые, как вы знаете, вы собираетесь оставить bg для задач, которые уже запущены и не хотят перезапускаться.

Имейте в виду, что оба являются специфичными для bash. Если вы не используете bash, команды могут быть разными.


211
2017-11-28 02:58



Я бы рекомендовал сделать disown -h - Michele
интересный экран и tmux не работают для шахтеров, bur nohup работает - Yasin Okumuş


Вы можете это сделать, используя screen,

Тип man screen узнать больше или прочитать это экранная страница,

Простой сценарий:

  • ssh в ваш удаленный ящик. Тип screen Затем запустите процесс, который вы хотите.

  • Нажмите Ctrl- тогда Ctrl-D, Это будет «отсоединять» сеанс экрана, но оставит ваши процессы запущенными. Теперь вы можете выйти из удаленного окна.

  • Если вы хотите вернуться позже, войдите снова и введите screen -rЭто «возобновит» сеанс экрана, и вы сможете увидеть результаты своего процесса.


178
2017-10-21 12:20



Обычно я называю сеансы экрана, используя screen -S name чтобы было легче подключиться к правильному позже. - David Oneill
Ссылка не работает - Gab是好人
Лично я работаю над коробкой без программного обеспечения для управления пакетами. Потратив примерно полчаса на создание зависимостей для TMUX (который у меня лично есть и у меня есть) из источника, стало ясно, что экран стал лучшим и более простым решением для меня. TL; DR: оптимальное решение этой проблемы зависит от варианта использования, машины и того, сколько времени вам нужно настроить. Спасибо за этот ответ :) - Max von Hippel
Сочетание с screen -S перед отъездом и screen -r при возвращении удивительно! - Meloman
Спасибо за это. Это решение сработало для меня, пока tmux не сделал (я использую версию bash для Windows, а ssh'ing - в Linux-машину) - Michael Sorensen


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

disown [-ar] [-h] [jobspec… |pid… ]

Без параметров удалите каждый jobspec из таблицы активных рабочих мест. Если -h , задание не удаляется из таблицы, но отмечено так, что SIGHUP не отправляется на задание, если оболочка получает SIGHUP. Если jobspec нет, и ни -a ни -r опция, используется текущее задание. Если нет jobspec предоставляется, -a опция означает удаление или отметку всех заданий; -r вариант без jobspec Аргумент ограничивает выполнение заданий.

С отключением вы можете закрыть терминал и запустить процесс на машине.


72
2017-10-21 13:19



Это также мой любимый способ сделать это. Я часто использую disown -a && exit - Stefano Palazzo♦
Отлично. Это прекрасная команда и она заслуживает всех! - Greg
одно слово предостережения, я остановил работу с Ctrl-Z и не запустил ее в фоновом режиме, прежде чем звонить disown и он убил его. - HDave
Может произойти сбой, если он хочет писать на терминал. Перенаправление вывода запущенного процесса не так просто. Лучше начать его правильно с nohup. - jiggunjer
Это хороший ответ, потому что он напрямую отвечает на вопрос. Автор вопроса спросил, что делать после уже выполнив кучу длинных команд. Большинство из этих ответов позволяют вам знать, что делать до вы выполняете команды. - q0rban


Я застрял в большом mv, поэтому я не мог остановить процесс, настроить экран и снова запустить его. Мне удалось выйти из сеанса ssh с запущенным процессом, выполнив следующие шаги:

  1. ssh [сервер]
  2. команда
  3. CTRL + Z
  4. Б.Г.
  5. отрекаться
  6. Выход

Шаг 3 приостанавливает текущий процесс (например, моя команда «mv»). Шаг 4 ставит приостановленный процесс на задний план и возобновляет его. Шаг 5 позволяет отказаться от процесса.


37
2017-11-25 03:30



Встроенные - это всегда мой первый выбор :) THX - ken_oy
Этот ответ должен быть отмечен как правильный. Установка и привыкание экрана для решения этой проблемы преувеличена. - Ulrich-Lorenz Schlüter
Это очень полезно, если вы уже запустили какую-либо команду и которая работает в течение долгого времени. Завершение и запуск его на сеансе TMUX потребует времени - Deepali Mittal


Существуют две основные программы, которые вы можете использовать для поддержки программ и состояния терминала по нескольким ssh-соединениям. Они - экран (действующий, но, к сожалению, не имеющий силы. сейчас активно развивается) и tmux (новее, активно поддерживается). Byobu - это интерфейс, который может работать поверх их этих систем и предоставлять дополнительную информацию о состоянии Ubuntu. В новых установках он будет использовать tmux в качестве backend, если у вас установлена ​​более старая установка byobu и существующая конфигурация, она будет поддерживать предыдущий бэкэнд, будь то экран или tmux.

бёбу

Byobu можно установить на компьютер, сделав это на машине на базе Debian:

sudo aptitude install byobu

Используя yum, вы делаете

su -c 'yum install byobu'

Также можно установить byobu на другие дистрибутивы.

Использование byobu

Вы можете запустить byobu, запустив byobu на главной машине после подключения с помощью ssh. Это даст вам оболочку, которая выглядит так:

image-byobu

Вы также можете использовать терминал Byobu на машине Ubuntu с опцией -X и легко иметь идеальное рабочее beobu.

Применение:

Начать byobu, набрав byobu,

Вы можете нажать F2, чтобы создать новое окно в текущем сеансе, F3-F4, чтобы переключаться между различными окнами.

Самая лучшая часть byobobu - вам не нужно фактически убивать процессы, запущенные в терминале, чтобы покинуть терминал. Вы можете просто отправить экран / tmux (скелет byobu) на задний план и возобновить следующий приезд:

  • Чтобы оставить byobu и keeep, он работает (отсоединяется), нажимайте F6.
  • В следующий раз, когда вы придете, просто сделайте byobu и ты сможешь вернуться туда, где ты был.

    byobu-detach-attach

Вы также можете создавать различные сеансы byobu byobu -S session1и так далее. И вы можете подключиться к любому из них, когда вернетесь.

Вы можете сделать гораздо больше, используя Byobu. Используй это! Некоторые окончательные руководства Вот, Вот или Вот,


19
2017-11-24 22:09



Я попытался использовать byobu из сеанса, основанного на PuTTY, в своем поле Ubuntu, но я возвращаю строку состояния и прокручиваю на дисплее. Несмотря на то, что он отсоединился правильно, нажав F6, это не было полезным решением в моей настройке. - jfmessier
@jfmessier Это потому, что PuTTY не принимает ncurses (utf-8 в принципе) хорошо. Можно устранить эту проблему, следуя этой теме - stackoverflow.com/questions/10731099/... - SiddharthaRT
Это круто! 1. он дает мне цветную подсказку bash, которую я не могу включить с bash в качестве моей оболочки по умолчанию, и 2. Я могу запустить одновременно 2 бота и все еще есть еще один терминал для работы! @SiddharthaRT вы заслуживаете поддержки сэра! - Dev


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

Вы можете использовать поЬир но современная мудрость подсказывает, что вы используете экран или byobu в качестве своего логина, чтобы вы могли отсоединиться и оставить все в порядке.

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

Существует разумное начало работы руководство по экрану Вот.

бёбу ставит простой в использовании интерфейс поверх экрана с меню и т. д. Это также текущая реализация экрана на более новой ubuntu. F2 для запуска нового терминала F3 / F4 для переключения взад и вперед и F6 для разъединения. Регулярно завершайте вывод на конечные терминалы.


16
2017-10-21 12:16



byobu использует tmux в эти дни .. - scottl
«Вы не можете сделать это, как только процесс начнется, вам нужно настроить все, прежде чем запускать долгое задание». - нет, вы можете использовать disown для достижения этой цели. См. Ответ @ bassgey - Rich
после борьбы за изучение экрана и tmux .... byobu принес слезы на глаза - HDave
disown и при необходимости просто Ctrl-z, тогда bg чтобы получить его от активного терминала и от фона. Затем, disown, - mimoralea


Эй, хотя я согласился, что экран является наиболее эффективным вариантом. Вы можете использовать vncserver, а затем запустить процесс на нем.

Кроме того, если ваши единственные проблемы состоят в том, чтобы запустить процесс и не нужно брать его обратно, и, самое главное, вы не знали, что вам нужно закрыть сеанс, и у вас уже есть процесс, вам не повезло, если вы использовали bash как оболочку

Сначала вам нужно отправить процесс на задний план, набрав Ctrl + Z, а затем bg% 1 (число зависит от номера задания, обычно это 1, но вы можете легко вытащить список, используя задания команды)

Наконец, вызовите команду disown (за ней следует jobid ... так же, как и с командой bg)

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


7
2018-06-06 21:29



Этот ответ лучший! Почему все говорят о screen, вопрос был поставлен после входа в систему, как сохранить работу процессов, теперь после входа в систему, но перед их запуском. Отличный ответ Хорхе, ты действительно помог мне! :) - jwbensley
Просто bg (без %1) достаточно часто, поскольку по умолчанию используется текущее задание - Walter Tross
Было бы неплохо иметь исчерпывающий ответ: априори (настройка заранее): экран экрана ascii (старый), tmux (neewer); X windows: vnc (старый, по-прежнему поддерживается), xpra (новее), причем xpra является без корневым. Задняя (сохраняющаяся после того, как вы начали): ^ Z, отречься, но я слишком ленив, чтобы ее больше использовать. - Krazy Glew