Как восстановить оболочку после разъединения

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

В csh Вы используете setenv в ударе Вы используете export определить их.

Так или иначе Вы могли записать свой собственный файл конфигурации и включать его с source в dotfiles Ваших оболочек.

39
24.05.2016, 20:50
7 ответов

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

Вот пример.

$ tmux
$ make <something big>
......
Connection fails for some reason
Reconect

$ tmux ls
0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30]

$ tmux attach -t 0
Back in the tmux sesion
64
27.01.2020, 19:35
  • 1
    не имеет tmux, и не позволяюсь установить вещи не в моем списке текущих дел... –   23.08.2011, 12:44
  • 2
    @sergio Мой сердечный выход за край :-)) Использовать screen. –   23.08.2011, 12:45
  • 3
    @sergio В системе Unix, фактически любое приложение, которое не требует корневых полномочий работать, может быть установлен в корневом каталоге. –  Kusalananda♦ 14.04.2017, 10:10

Рекомендации для tmux и экрана являются оба хорошими предложениями. Они подразумевают ответ на Ваш вопрос, но на самом деле не заявляют это. Ответ на вопрос: нет никакого пути. Если Вы входите в систему через ssh, оболочка заканчивается, когда соединение отбрасывает. Обходное решение должно войти и сразу запустить виртуальный терминал некоторого вида (такой как tmux). Когда соединение отбрасывает, оболочка, в которой Вы находитесь, заканчивается, но можно открыть новую оболочку и снова соединиться с виртуальным терминалом (который выполняет оболочку, в которой Вы на самом деле делаете свою работу.)

35
27.01.2020, 19:35
  • 1
    Хорошо. его ясное теперь. –   23.08.2011, 12:46
  • 2
    Принятие вкусного процесса все еще работает (сразу не завершился, когда оболочка получила SIGHUP), reptyr или подобный могло бы быть достаточным для восстановления процесса или - сбой, которые - получают любой будущий вывод. Оболочка обычно завершалась бы на разъединении, все же. –  Eroen 08.12.2012, 00:28
  • 3
    @Eroen, который Вы имеете в виду, даже whe использующий tmux, ОС, завершит процесс tmux, после того как это находит, что соединение потеряно? –  Dojo 23.10.2015, 15:26
  • 4
    @Dojo, Когда соединение завершается, tmux экземпляр, будет остановлен, но tmux сессия (и оболочки, которыми это управляет) не ляжет спать. –  William Pursell 23.10.2015, 18:53
  • 5
    Если пользователь потерял соединение с удаленным ssh сервером, потому что, например, он внезапно случайно отключил кабель RJ-45, я думаю, что ssh сервер все еще сохраняет эту сессию до предопределенного тайм-аута (120 секунд, например). Так в этом случае есть ли способ возобновить эту сессию, которая все еще жива на ssh стороне сервера в течение 120 секунд после того, как кабель отключается? –  Gab是好人 16.09.2016, 17:03

Как William сказал, короткий ответ не, нет никакого пути. Для предотвращения этого, Вы могли использовать экранную команду перед потерей соединения

8
27.01.2020, 19:35
  • 1
    от того, что я понимаю, я, должно быть, инициировал конфетку с экраном... welll, я не сделал. я не могу повторно выполнить конфетку, она говорит, что то, что это все еще было используемым и я не хотим вызывать, уничтожают его... как я могу восстановить управление рабочей конфеткой? –   23.08.2011, 12:41
  • 2
    и byobu являются хорошим дополнением, чтобы экранировать, запустить его автоматически в хорошем графическом терминале launchpad.net/byobu –   23.08.2011, 12:43
  • 3
    Насколько я знаю, что Вы не можете, если нет некоторый скрытый путь к перенаправлению вывода от вкусной команды в Вашу текущую сессию термина, но я не могу думать о том первое, что пришло на ум. –  Nicholas Smith 23.08.2011, 12:44
  • 4
    Существует много частичных решений этого использования отладчики и c., чтобы дать процессу новую родительскую оболочку. Reptyr один, и сообщение в блоге описывает проблему, обходное решение и некоторые другие реализации. –  Eroen 08.12.2012, 00:23

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

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

Так, шаги были бы следующие:

  1. Войдите в сервер
  2. Выполните свою команду: "nohup sudo вкусное обновление и" (это также зарегистрирует весь вывод в nohup.out файл в Вашем текущем каталоге),
  3. Выполненный "отрицают %1"
  4. Не стесняйтесь разъединяться в этой точке или ожидать, чтобы быть разъединенными :)

Когда Вы возвращаетесь к серверу, просто "хвост nohup.out", чтобы видеть, как команда делает.

3
27.01.2020, 19:35
  • 1
    Разве это не работало бы довольно плохо в общем случае? Например, с командами, которые хотят вход в какой-то момент... Для абсолютно неинтерактивных команд это могло бы работать достаточно хорошо и избежать издержек (и возможно бывший должный установить) оконечный мультиплексор. –  a CVn 17.09.2013, 17:11
  • 2
    Да, это только работает, если Ваши команды не хотят ввода данных пользователем, я обновил ответ. В целом оконечный мультиплексор является способом пойти наверняка, но было упомянуто, что никаким дополнительным инструментам не разрешили быть установленными. –  zygis 17.09.2013, 18:03
  • 3
    Абсолютно, это - действительный ответ, просто немного ограниченный в его случаях возможного применения. Upvoted с редактированием. –  a CVn 18.09.2013, 10:29

Как многие предлагали screen и tmux, они оба поддерживают базовую функциональность, но имеют различные специфические особенности, поэтому нельзя сказать, что один из них превосходит другой во всех случаях. Например, только tmux поддерживает Window-splitting, в то время как только GNU-экран может переключать длинную обертку с помощью (Ctrl+a r). Смотрите более подробное сравнение здесь.

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

Autossh - это программа для запуска копии ssh и наблюдения за ней, перезапускающая ее по мере необходимости, если она погибает или останавливает проходящий трафик. Идея заключается в rstunnel.

Mosh - приложение для удаленного терминала, позволяющее работать в роуминге, поддерживающее прерывистое соединение, а также обеспечивающее интеллектуальное локальное эхо и линейное редактирование пользовательских нажатий клавиш. Мош является заменой SSH. Это более надежное и отзывчивое приложение, особенно по Wi-Fi, сотовым и междугородним соединениям.

1
27.01.2020, 19:35

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

см .: https://github.com/nelhage/reptyr https://www.ostechnix.com/reptyr-move-running-process-new-terminal/

Есть ли способ восстановить мои зависшие сеансы после повторного подключения?

РЕДАКТИРОВАТЬ: я выполняю некоторые обновления и установку с помощью yum и беспокоюсь , что это может быть проблемой, если процессы продолжают зависать посередине из того, что они делают.

То же самое, я потерял удаленное соединение с сеансом обновления yum. Я поискал и нашел этот вопрос ... затем снова подключился и использовал screen на этот раз:

  1. переподключить ssh
  2. экран
  3. установить reptyr по ссылкам выше
  4. ps -a | grep yum
  5. reptyr psid

и вот я нахожусь в восстановленном приглашении, которое yum выдавал несколькими часами ранее.

Технически все ответы верны, это НЕ восстановление зависшего сеанса, это переподготовка потерянного процесса к текущему сеансу. И очень полезно, это тоже ...

{ {1}}
3
27.01.2020, 19:35

Это можно сделать с помощью оболочки tmux. Если вы отключились, самый быстрый способ повторно подключить сеанс —:

tmux a #0
-1
27.01.2020, 19:35

Теги

Похожие вопросы