Я использую reboot -f
команду удаленно, чтобы принудительно перезагрузить компьютер Unix. Проблема в том, что ssh-соединение остается активным долгое время, чего я не знаю почему? Я хочу закрыть ssh-соединение сразу после перезагрузки компьютера и вернуться в локальную оболочку. Как я могу это сделать? Обратите внимание, что команда перезагрузки без -f
флага не работает.
18
Enter
. Затем, например,~.
чтобы прекратить сеанс.Enter ~?
для списка других.Ответы:
Команда
reboot -f
никогда не возвращается (если только у вас не было разрешения на перезагрузку). В момент его выдачи SSH-клиент ожидает выполнения каких-либо действий:Поскольку процесс сервера SSH не работает, клиент SSH не умрет, пока не сработает таймер.
Если вы запустите
ssh remotehost 'reboot -f >/dev/null &'
, то что произойдет:reboot
команду в фоновом режиме.reboot
вызывает перезагрузку машины.Однако это ненадежно: в зависимости от времени, шаг 3 может произойти до шага 2. Добавление таймера делает это маловероятным:
Чтобы быть абсолютно уверенным в том, что сторона сервера настроена на работу
reboot
, при этом убедитесь, что она фактически не перезагружается, прежде чем уведомлять клиента о том, что она зафиксирована, вам нужно дополнительное уведомление для перехода с сервера на клиент. Это может быть выведено через соединение SSH, но это становится сложным.источник
(sleep 1 && sudo reboot &) && exit
. Скобки порождают подпроцесс, который ждет одну секунду, а затем инициирует перезагрузку. Однако хост-процесс немедленно завершает сеанс ssh. Я не гуру из снарядов, но до сих пор это работало для меня.Я нашел это решение, чтобы выполнить лучшее для меня.
Используйте
-o "ServerAliveInterval 2"
с вашейssh
командой, вот так:Указанная опция заставляет клиентскую сторону каждые 2 секунды проталкивать сервер по безопасному каналу. В конце концов, когда перезагрузка продолжается, он перестает отвечать, и клиент разрывает соединение.
источник
Некоторые ответы были близки, но правильный ответ:
объяснение:
exit
в качестве последней команды, поэтому статус последней команды 0 (успех). Вы можете приготовить сон, если хотите, но это не обязательно.stdin
иstdout
все еще привязаны к виртуальному терминалу через SSH, поэтому соединение не будет закрыто. Чтобы завершить сеанс SSH, нужно сделать две дополнительные вещи и оставить команду работающей в фоновом режиме.stdout
иstderr
на/dev/null
так они не перенаправляются виртуальный терминал , который содержит SSH сессии. Это&>/dev/null
часть.stdin
на нечитаемый файл тем же способом. Это то, чтоnohup
делает встроенная оболочка .Если только команда, работающая в фоновом режиме и всячески отсоединенная от терминала,
exit
закроет сеанс, а поскольку на виртуальном терминале его нетstdin
или онstdout
останется, SSH прервет соединение без ошибок.источник
Я использую следующую команду:
ssh -t <hostname> 'sudo shutdown --reboot 0 && exit'
Вот что это делает:
источник
Вы пробовали следующее
Я обнаружил, что в некоторых системах, над которыми я работал на проходе, у команды перезагрузки были некоторые проблемы. С другой стороны, я не могу найти ничего в справочной странице shutdown, которая бы делала то же самое, что и перезагрузка с флагом -f.
источник
Как насчет выхода из сеанса ssh и перезагрузки системы с помощью следующей команды:
После этого просто нажмите Ctrl + C для завершения SSH.
источник
Я нашел решение для этого, которое может быть полезным и для других. Я использовал следующую команду, чтобы закрыть соединение сразу после запуска команды, прикрепленной к ssh:
Я не совсем понимаю причину, по которой эта команда принудительно закрывает соединение, но, по крайней мере, она мне помогла. Если кто-то понимает, почему он убивает соединение ssh; пожалуйста, объясни.
источник
Это требует 1-минутной задержки, но сработало для меня надежно и решает проблему зависания клиента SSH:
Это планирует отключение системы на 1 минуту позже, что дает время для завершения выхода из системы и, следовательно, завершения SSH. Если вы хотите , чтобы ждать , как мало времени , как это возможно, вы могли бы заменить
+1
сHH:MM
для быстро приближающегося времени суток , но это может быть сложно времени правильно и может иметь до второй задержки 59.источник
Простой способ, который я нашел, - это выполнить команду shutdown / reboot в качестве фоновой задачи (используя '&'), защищая ее от закрытия при закрытии сеанса с помощью nohup вместе с немедленным завершением оболочки / сессии:
nohup shutdown -r now & exit
Таким образом, клиент SSH не зависает, так как сеанс завершается немедленно, а удаленная система выполняет свою перезагрузку асинхронно.
источник
Попробуйте эту команду:
источник
reboot -f
.