4 способа сохранить выполнение команды после выхода из сеанса SSH

by itisgood

Допустим, вы используете удаленную систему через SSH.

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

Как вы, возможно, знаете, после выхода из SSH все рабочие задания будут прекращены.

Вы начнете работу с начала? Вам не обязательно.

Здесь я даю разные 4 метода, чтобы команда запускалась после выхода из сеанса ssh.

Продолжайте выполнение команды после выхода из сеанса SSH в Linux

Могло бы быть много способов сделать это.

Однако я считаю, что следующие методы просты и понятны.

Способ 1 – Использование screen

Инструмент screen, полноэкранный оконный менеджер с эмуляцией терминала VT100 / ANSI, позволяет безопасно отсоединяться от сеанса SSH без выхода из удаленного задания.

Это будет полезно для тех, кто работает с несколькими удаленными серверами.

Эта команда поставляется предварительно в большинстве операционных систем 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:

screen

Сеанс уже запущен.

Теперь запустите любую работу или задачу, которые вы хотите сделать в своей удаленной системе.

Я собираюсь загрузить образUbuntu 16.04:

wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso

Ubuntu 16.04 ISO составляет около 1,5 ГБ.

Обычное широкополосное подключение занимает около часа.

Вам не нужно так долго ждать.

Просто оставьте процесс загрузки, запущенный на удаленной системе, и выйдите из сеанса экрана, нажав «Ctrl-A», а затем «d».

Вы увидите вывод, как показано ниже.

[detached from 1365.pts-0.server]

После отсоединения сеанса экрана вы можете выйти из удаленной системы. Удаленное задание будет работать на сервере.

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

screen -r

Вы увидите, что процесс все еще работает.

Если у вас несколько сеансов screen вам нужно ввести идентификатор сеанса экрана, чтобы повторно подключиться к нему.

Чтобы просмотреть количество сеансов экрана, запустите:

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 можно отсоединить от экрана и продолжить работать в фоновом режиме, а затем снова подключиться.

Как и инструмент «Screen», вы также можете использовать 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 помогает вам перемещать запущенные процессы между pty.

Метод 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

 

You may also like

2 комментария

Topgrade — инструмент командной строки для обновления всех пакетов в Linux — ITISGOOD.RU 11.07.2018 - 10:20

[…] у вас нет tmux, вы можете получить его с помощью диспетчера пакетов […]

Reply
Tmate — безопасный обмен сеансом SSH-терминала с пользователями Linux — Information Security Squad 07.01.2019 - 11:29

[…] — это клон tmux (терминальный мультиплексор), который обеспечивает […]

Reply

Leave a Comment