4 способа сохранить выполнение команды после выхода из сеанса SSH
Допустим, вы получаете удаленный доступ к другой системе через SSH. Вы хотите запустить команду, выполнение которой занимает много времени, а затем выйти из сеанса SSH, но оставить команду работающей, даже если вы больше не подключены к удаленной системе. Как ты это делаешь? Как вы, возможно, знаете, как только вы выйдете из SSH, все запущенные задания будут прекращены. Вы бы начали работу с самого начала? Вам не обязательно. Здесь я привел 4 метода, позволяющие сохранить выполнение команды после выхода из сеанса ssh. Читай дальше.
Продолжайте выполнять команду после выхода из сеанса SSH в Linux
Для этого может быть много способов. Тем не менее, я считаю, что следующие методы просты и понятны.
Способ 1 — Использование экрана
Инструмент screen, полноэкранный оконный менеджер с эмуляцией терминала VT100/ANSI, позволяет безопасно отключиться от сеанса SSH, не выходя из удаленного задания. Будет полезно тем, кто работает с несколькими удаленными серверами. Команда Screen предустановлена в большинстве операционных систем Linux. На всякий случай, если он не установлен, вы можете установить его с помощью менеджера пакетов вашего дистрибутива.
В Arch Linux и производных:
sudo pacman -S screen
В RHEL, CentOS и других системах на базе RPM:
sudo yum install screen
В Debian, Ubuntu и других системах на базе DEB:
sudo apt-get install screen
В SUSE/OpenSUSE:
sudo zypper install screen
После установки экрана на удаленных системах запустите сеанс экрана:
screen
Сеанс экрана начался. Теперь запустите любое задание или задачу, которую вы хотели выполнить, в своей удаленной системе.
Я собираюсь загрузить образ Ubuntu 16.04:
wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso
Размер ISO Ubuntu 16.04 составляет около 1,5 ГБ. Загрузка займет около часа при обычном широкополосном соединении. Вам не придется ждать так долго. Просто оставьте процесс загрузки запущенным в удаленной системе и выйдите из сеанса экрана, нажав Ctrl-A, а затем “d“. Вы увидите результат, подобный приведенному ниже.
[detached from 1365.pts-0.server]
После отключения от сеанса экрана вы можете выйти из удаленной системы. Удаленное задание продолжит выполняться на сервере.
Вы можете повторно подключиться к сеансу экрана в любое время с помощью команды:
screen -r
Вы увидите, что процесс там все еще выполняется.
Если у вас несколько сеансов экрана, вам необходимо ввести идентификатор сеанса экрана, чтобы повторно подключиться к нему. Чтобы просмотреть количество сеансов экрана, запустите:
screen -ls
Пример вывода будет:
There are screens on:There are screens on:
1382.pts-0.server (Saturday 15 July 2017 04:39:51 IST) (Detached)
1365.pts-0.server (Saturday 15 July 2017 04:38:44 IST) (Detached)
2 Sockets in /var/run/screen/S-sk.
Теперь повторно подключитесь к нужному сеансу экрана, скажем, 1382, запустите:
screen -r 1382
Более подробную информацию можно найти на страницах руководства.
man screen
Способ 2 — использование tmux
tmux — это мультиплексор терминалов, который позволяет создавать, получать доступ к нескольким терминалам и управлять ими с одного экрана. Сеанс tmux можно отсоединить от экрана и продолжить работу в фоновом режиме, а затем снова подключить. Как и инструмент «Экран», вы также можете использовать tmux для отключения от сеанса SSH, не выходя из удаленных заданий. Команда Tmux предустановлена в большинстве операционных систем Linux. На всякий случай, если он не установлен, вы можете установить его с помощью менеджера пакетов вашего дистрибутива.
В Arch Linux и производных:
sudo pacman -S tmux
В RHEL, CentOS и других системах на базе RPM:
sudo yum install tmux
В Debian, Ubuntu и других системах на базе DEB:
sudo apt-get install tmux
В SUSE/OpenSUSE:
sudo zypper install tmux
После установки tmux запустите сеанс tmux с помощью команды:
tmux
Теперь приступайте к своей задаче или работе. Затем безопасно отключитесь от сеанса tmux, не выходя из удаленных заданий, нажав "CTRL-b", а затем "d". Это отключит ваш сеанс tmux, но оставит все, что вы делаете в этом сеансе, в фоновом режиме. Это означает, что все пульты будут работать, даже если вы отключены от сеанса.
Чтобы просмотреть доступные сеансы, запустите:
$ tmux ls
0: 1 windows (created Sat Jul 15 16:51:35 2017) [134x33]
1: 1 windows (created Sat Jul 15 16:53:58 2017) [134x33]
Вы можете повторно подключиться к сеансу tmux, используя соответствующий идентификатор сеанса, как показано ниже:
tmux attach -t 0
Более подробную информацию можно найти на страницах руководства.
man tmux
Способ 3 — использование Reptyr
Что, если вы вообще забыли запустить команды в screen/tmux? Не беспокойся. Здесь на помощь приходит Reptyr. Reptyr помогает вам перемещать запущенные процессы между ptys. Мы уже публиковали подробное руководство по Reptyr. Проверьте следующую ссылку.
- Reptyr - перенос запущенного процесса с одного терминала на другой, не закрывая его
Способ 4. Использование nohup.
nohup, означает No hangup, — это еще одна утилита командной строки, которая поможет вам запускать команды Linux даже после отключения от сеансов SSH. Поскольку он является частью GNU coreutils, вам не нужно его устанавливать. Он предустановлен во всех дистрибутивах Linux.
Использование абсолютно простое. После входа в удаленную систему все, что вам нужно сделать, это:
nohup <command> &
Да, это так просто.
Пример :
nohup wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso &
Теперь вы можете выйти из сеанса SSH. Удаленное задание продолжит выполняться.
Войдите в удаленную систему и выполните следующую команду, чтобы просмотреть список запущенных заданий.
$ jobs -l
[1]+ 1421 Running nohup wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso &
По умолчанию выходные данные будут добавлены в nohup.out. Вы, конечно, можете изменить выходной файл.
Вот еще один пример.
nohup find -size +10M > log.txt &
Приведенная выше команда найдет файлы размером более 10 МБ и запишет выходные данные в файл log.txt.
Более подробную информацию можно найти на страницах руководства.
man nohup
И это все, ребята. Есть что-нибудь на примете? Не стесняйтесь, дайте мне знать в разделе комментариев ниже. Впереди еще больше хороших вещей. Продолжайте посещать!
Ваше здоровье!