- 5 способов сохранить удаленные сеансы SSH и процессы после отключения
- Понимание процессов в Linux
- Нормальный процесс
- Сиротский процесс
- Процесс демона
- Методы сохранения сеанса SSH после отключения
- 1. Использование команды screen для продолжения сеансов SSH
- 2. Использование Tmux (терминальный мультиплексор) для поддержания сеансов SSH в рабочем состоянии
- 3. Использование команды nohup для продолжения сеансов SSH
- 4. Использование команды disown для продолжения сеансов SSH
- 5. Использование команды setsid для запуска сеансов SSH
- Заключение
5 способов сохранить удаленные сеансы SSH и процессы после отключения
Проще говоря, SSH или Secure Shell — это способ, с помощью которого человек может получить удаленный доступ к другому пользователю в другой системе, но только в командной строке, то есть в режиме без графического интерфейса. С технической точки зрения, когда мы подключаемся по ssh к другому пользователю в какой-то другой системе и запускаем команды на этой машине, он фактически создает псевдотерминал и прикрепляет его к оболочке входа пользователя, вошедшего в систему.
Когда мы выходим из сеанса или время сеанса истекает после простоя в течение достаточно долгого времени, сигнал SIGHUP отправляется на псевдотерминал и все задания, которые были запущены на этом терминале, даже задания, родительские задания которых инициированы на псевдотерминале, также получают сигнал SIGHUP и принудительно завершаются.
Только задания, настроенные на игнорирование этого сигнала, остаются в силе после завершения сеанса. В системах Linux у нас может быть много способов запустить эти задания на удаленном сервере или любой машине даже после выхода пользователя из системы и завершения сеанса.
Понимание процессов в Linux
Нормальный процесс
Нормальные процессы — это процессы, продолжительность жизни которых равна сеансу. Они запускаются во время сеанса как процессы переднего плана и заканчиваются через определенный промежуток времени или при выходе из сеанса. Эти процессы имеют своего владельца как любого действительного пользователя системы, включая root.
Сиротский процесс
Процессы-сироты — это процессы, у которых изначально был родитель, создавший процесс, но через некоторое время родительский процесс непреднамеренно умер или аварийно завершился, в результате чего init стал родителем этого процесса. Такие процессы имеют init в качестве своего непосредственного родителя, который ожидает этих процессов, пока они не умрут или не закончатся.
Процесс демона
Это некоторые намеренно потерянные процессы, такие процессы, которые намеренно оставлены в системе, называются демонами или намеренно потерянными процессами. Обычно это длительные процессы, которые однажды инициируются, а затем отсоединяются от любого управляющего терминала, чтобы они могли работать в фоновом режиме до тех пор, пока они не будут завершены или в конечном итоге не выдадут ошибку. Родитель таких процессов намеренно умирает, заставляя дочерний выполняться в фоновом режиме.
Методы сохранения сеанса SSH после отключения
Существуют различные способы оставить сеансы ssh после отключения, как описано ниже:
1. Использование команды screen для продолжения сеансов SSH
экран — это текстовый оконный менеджер для Linux, который позволяет пользователю одновременно управлять несколькими терминальными сеансами, переключаться между сеансами, вести журнал сеансов для запущенных сеансов на экране и даже возобновлять сеанс в любое время. не беспокоясь о выходе из сеанса или закрытии терминала.
сеансы screen можно запускать, а затем отсоединять от управляющего терминала, оставляя их работающими в фоновом режиме, а затем возобновлять в любое время и даже в любом месте. Просто вам нужно начать сеанс на экране и, когда вы хотите, отсоединить его от псевдо-терминала (или управляющего терминала) и выйти из системы. Когда вы почувствуете, вы можете повторно войти в систему и возобновить сеанс.
Запуск сеанса экрана
После ввода команды ‘screen’ вы попадете в сеанс нового экрана, в рамках которого вы можете создавать новые окна, перемещаться между окнами, блокировать экран и делать многое другое, что вы можете делать на нормальный терминал.
После запуска сеанса экрана вы можете запустить любую команду и продолжить сеанс, отсоединив сеанс.
Отсоединение экрана
Просто когда вы хотите выйти из удаленного сеанса, но хотите сохранить сеанс, который вы создали на этом компьютере, тогда вам нужно просто отсоединить экран от терминала, чтобы у него не осталось управляющего терминала. После этого вы можете безопасно выйти из системы.
Чтобы отсоединить экран от удаленного терминала, просто нажмите \Ctrl+a” , а затем сразу же \d” , и вы вернетесь к терминалу, увидев сообщение о том, что Экран отсоединяется. Теперь вы можете безопасно выйти из системы, и ваша сессия останется в живых.
Возобновление сеанса отсоединенного экрана
Если вы хотите возобновить сеанс отсоединенного экрана, который вы оставили перед выходом из системы, просто снова войдите в удаленный терминал и введите \screen -r в случае, если открыт только один экран, и если открываются сеансы с несколькими экранами, запустите \screen -r
Чтобы узнать больше о команде screen и о том, как ее использовать, просто перейдите по ссылке: Используйте команду screen для управления сеансами терминала Linux.
2. Использование Tmux (терминальный мультиплексор) для поддержания сеансов SSH в рабочем состоянии
Tmux — это еще одно программное обеспечение, созданное для замены экрана. Он обладает большинством возможностей экрана с несколькими дополнительными возможностями, которые делают его более мощным, чем экран.
Он позволяет, помимо всех опций, предлагаемых screen, разделять панели по горизонтали или вертикали между несколькими окнами, изменять размер оконных панелей, отслеживать активность сеанса, создавать сценарии с использованием режима командной строки и т. д. Благодаря этим функциям tmux получил широкое распространение почти все дистрибутивы Unix и даже он был включен в базовую систему OpenBSD.
Начать сеанс Tmux
После выполнения ssh на удаленном хосте и ввода tmux вы войдете в новый сеанс с новым окном, открывающимся перед вами, в котором вы можете делать все, что делаете на обычном терминале.
После выполнения ваших операций на терминале вы можете отключить этот сеанс от управляющего терминала, чтобы он перешел в фоновый режим, и вы могли безопасно выйти из системы.
Отключить сеанс Tmux от терминала
Либо вы можете запустить \tmux detach при работающем сеансе tmux, либо использовать ярлык (Ctrl+b, затем d) . После этого ваш текущий сеанс будет отсоединен и вы вернетесь к своему терминалу, откуда сможете безопасно выйти из системы.
Возобновление закрытого сеанса Tmux
Чтобы повторно открыть сеанс, который вы отсоединили и оставили как есть при выходе из системы, просто повторно войдите на удаленный компьютер и введите \tmux attach”, чтобы повторно подключиться к закрытому сеансу и он все еще будет там и будет работать.
Чтобы узнать больше о tmux и о том, как его использовать, просто перейдите по ссылке: Используйте Tmux Terminal Multiplexer для управления несколькими терминалами Linux.
3. Использование команды nohup для продолжения сеансов SSH
Если вы не очень хорошо знакомы с screen или tmux, вы можете использовать nohup и отправить свою длительную команду в фоновый режим, чтобы вы могли продолжить, пока команда будет продолжать выполняться в фоновом режиме. После этого вы можете безопасно выйти из системы.
С помощью команды nohup мы указываем процессу игнорировать сигнал SIGHUP, который отправляется сеансом ssh при завершении, что позволяет команде сохраняться даже после выхода из сеанса. При выходе из сеанса команда отключается от управления терминалом и продолжает работать в фоновом режиме как процесс демона.
Выполнение команды с использованием nohup в фоновом режиме
Вот простой сценарий, в котором мы запустили команду find для поиска файлов в фоновом режиме в сеансе ssh с использованием nohup, после чего задача была отправлена в фоновый режим с немедленным возвратом подсказки, дающей PID и задание ID процесса ([JOBID] PID) .
# nohup find / -type f $gt; files_in_system.out 2>1 &
Возобновление сеанса для просмотра, выполняется ли задание.
При повторном входе в систему вы можете проверить статус команды, вернуть ее на передний план с помощью fg %JOBID для отслеживания ее выполнения и так далее. Ниже вывод показывает, что задание было выполнено, поскольку оно не отображается при повторном входе в систему, и выдал вывод, который отображается.
4. Использование команды disown для продолжения сеансов SSH
Еще один элегантный способ позволить вашей команде или отдельной задаче работать в фоновом режиме и оставаться активными даже после выхода из сеанса или отключения — использовать disown.
Disown, удаляет задание из списка заданий процесса системы, поэтому процесс защищен от уничтожения во время отключения сеанса, поскольку он не получит SIGHUP от оболочки, когда вы выходите из системы.
Недостатком этого метода является то, что его следует использовать только для заданий, которые не требуют каких-либо входных данных из stdin и не нуждаются в записи в stdout, если вы специально не перенаправляете ввода и вывода заданий, потому что, когда задание попытается взаимодействовать с stdin или stdout, оно остановится.
Выполнение команды с помощью disown в фоновом режиме
Ниже мы отправили команду ping в фоновый режим, чтобы он продолжал работать и удалялся из списка заданий. Как видно, задание сначала было приостановлено, после чего оно все еще оставалось в списке заданий как Идентификатор процесса: 15368.
$ ping linux-console.net > pingout & $ jobs -l $ disown -h %1 $ ps -ef | grep ping
После этого сигнал отказа был передан заданию, и оно было удалено из списка заданий, хотя все еще выполнялось в фоновом режиме. Задание все еще будет выполняться, когда вы повторно войдете на удаленный сервер, как показано ниже.
5. Использование команды setsid для запуска сеансов SSH
Другой утилитой для достижения требуемого поведения является setsid. Nohup имеет недостаток в том смысле, что группа процессов процесса остается неизменной, поэтому процесс, работающий с nohup, уязвим для любого сигнала, отправляемого всей группе процессов (например, Ctrl + C ).
setsid, с другой стороны, выделяет новую группу процессов для выполняемого процесса, и, следовательно, созданный процесс полностью находится в новой выделенной группе процессов и может выполняться безопасно, не опасаясь быть уничтоженным даже после выхода из сеанса.
Выполнить любую команду, используя setsid
Здесь показано, что процесс ‘sleep 10m’ был отсоединен от управляющего терминала с момента его создания.
$ setsid sleep 10m $ ps -ef | grep sleep
Теперь, когда вы повторно войдете в сеанс, вы все равно обнаружите, что этот процесс запущен.
Заключение
Какие способы вы могли бы придумать, чтобы ваш процесс продолжал работать даже после выхода из сеанса SSH? Если есть какой-либо другой и эффективный способ, который вы можете придумать, упомяните в своих комментариях.