Поэтому я работал apt-get upgrade
на сервере, когда маршрутизатор решил, что прошло слишком много времени с тех пор, как он в последний раз меня разозлил: он разорвал все соединения. Мораль этой истории состоит в том, чтобы screen
много использовать, когда вы находитесь на Bum Router.
Как бы то ни было, я снова вошел в систему и обнаружил в htop, что процесс все еще там висит, все еще ожидая обновления моего Y / N (к счастью, еще не нажал). Можно ли как-нибудь присоединиться к сеансу, который был прерван? Я закончил тем, что просто убил его, поскольку он не был в центре управления пакетами, но было бы здорово узнать об этом в будущем.
apt-get
процесс все еще запущен. Он должен был умереть вместе со всей цепочкой процессов вплоть до SSH. Я заметил, чтоdo-dist-upgrade
автоматически запускается вscreen
/byobu
сессии: может быть, в некоторых случаях,apt-get
то же самое?Ответы:
Ответ на ваш правильный вопрос: вы не можете . Я думаю, что основная проблема заключается в том, что процедуры аутентификации будут не синхронизированы. Просто так не работает.
Как вы сами заметили, решение состоит в том, чтобы по возможности использовать screen (кстати, tmux является альтернативой screen).
источник
byobu
хороший, более простой в использовании интерфейс дляscreen
(илиtmux
) - определенно стоит посмотреть (:Для запуска длительных процессов я использую screen или byobu, если вы хотите более дружественный интерфейс.
Для экрана вы можете использовать:
Это запустит [программу] и ее [аргументы] в сеансе экрана . После завершения программы сеанс автоматически закрывается. Если вы хотите сохранить сеанс после запуска вашей программы, просто запустите экран без каких-либо аргументов, и внутри сеанса появится новое приглашение. CTRL + A + D отсоединяет терминал от текущего сеанса.
Чтобы повторно присоединиться к предыдущему сеансу:
Если открыт только один сеанс, он будет немедленно присоединен. Если несколько сеансов продолжаются, он спросит вас, к какому из них вы хотите присоединиться. Если вы знаете имя сеанса, вы можете просто добавить его в качестве аргумента в эту командную строку.
Бёбу - хорошее улучшение. Он основан на экране , но в нижней части экрана есть панель, которая показывает все текущие сеансы в виде вкладок и упрощает их перемещение. Вы можете:
СЛОВО СОВЕТА : не оставляйте сеанс открытым с пользователем root . Если кто-либо получает доступ к вашему терминалу (локально или удаленно), он может легко повторно подключиться к текущему сеансу и использовать вашу систему в качестве пользователя root. При необходимости лучше начать сеанс, используя обычные пользовательские и sudo индивидуальные командные строки при необходимости.
источник
Хотя вы не можете присоединиться к прерванному сеансу SSH, вы можете переписать процесс, работающий внутри SSH, - функционально эквивалентный тому, что вы хотите.
инструкции
В вашем случае вы бы взяли на себя управление
apt-get
процессом из нового сеанса SSH,screen
сеанса или тому подобного. Моя любимая для этогоreptyr
команда:Затем с pid, который вы нашли для вашего процесса:
Или, если это не работает, попробуйте:
После этой стадии весь ваш ввод с клавиатуры идет в программу, которую вы взяли на себя. К сожалению, вы не увидите старые выходные данные сеанса SSH, такие как
apt-get
выходные данные, запрашивающие у вас подтверждение.Пояснения
Есть несколько других инструментов, которые в основном работают так же, как
reptyr
(то есть черезptrace
отладочное вложение). Смотрите следующие вопросы и ответы, где они обсуждаются:В приведенных выше инструкциях
reptyr 10626
используетсяptrace
отладочное вложение, в то время какsudo reptyr -T 10626
команда использует воровство TTY и является предпочтительной ( подробности ).Наконец, причина, по которой вы не можете принять сеанс SSH таким способом, заключается в том, что
sshd
процесс не контролируется хост-терминалом, вместо этого он предоставляет подчиненную часть терминала -pts
устройство, в то время как ведущая часть, управляющая им, находится на клиентская машина, здесь с разбитым сеансом SSH между ними. Когда вы принудительно берете такойsshd
процесс на себяreptyr -s <pid>
, ваш ввод с клавиатуры переходит к этому процессу, а не к его активному дочернему процессу. Так что «Ctrl + Z» просто убьет этоsshd
.источник
Я делал
do-dist-upgrade
через ssh с ноутбука, который перешел в режим ожидания, следовательноBroken pipe
. Вернувшись к машине, я увидел процессы, связанные с обновлением, все еще работающие, в том числеwhiptail
запрос на ввод информации (какой менеджер дисплея выбрать) и, соответственно, принадлежащий пользователю rootSCREEN
. Я был в состоянии сделатьsudo su -
иscreen -r
присоединиться к сессии, и, о чудо, передо мной есть диалоговое окно whiptail, способное принять участие. Я смог возобновить обновление без проблем.Примечание: это было обновление с Ubuntu 14.04 до 16.04.
источник