При работе с удаленной системой по протоколу SSH часто возникает необходимость запуска команды, на выполнение которой требуется много времени. Как вы, возможно, знаете, после закрытия соединения SSH все выполняющиеся задания будут прерваны. Встаёт вопрос, как сделать так, чтобы команда продолжала выполняться даже после того, как соединение SSH будет закрыто.
Оставляем команду работать после закрытия сеанса SSH
На самом деле, существует множество способов решить эту задачу. Ниже приводятся наиболее простые и понятные.
Метод 1 - screen
Инструмент screen
- полноэкранный оконный менеджер с эмуляцией терминала VT100/ANSI позволяет безопасно отключиться от сеанса SSH без выхода из удалённых заданий. Он будет полезен тем, кто работает с несколькими удалёнными серверами. Утилита screen
входит в стандартные репозитории большинства операционных систем на базе Linux. Для того, чтобы установить screen
в Ubuntu выполните следующую команду:
$ sudo apt-get install screen
Для запуска нового сеанса терминала выполните следующую команду:
$ screen
Теперь можно запустить любую длительную команду. Для того, чтобы отключиться от сессии терминала, нажмите сочетание клавишь Ctrl+A, а затем d. В терминале появится что-то похожее на:
[detached from 16540.pts-1.goubuntu-desktop]
Чтобы вернуться в эту сессию, выполните команду
$ screen -r
Вы увидите, что все запущенные процессы продолжают работу.
Если у вас есть несколько открытых сеансов screen
, то при подключении нужно будет указать идентификатор сеанса. Для просмотра активных сеансов выполните следующую команду
$ screen -ls
Результат будет примерно таким:
There are screens on:
16666.pts-1.goubuntu-desktop (27.11.2018 20:32:35) (Detached)
16648.pts-1.goubuntu-desktop (27.11.2018 20:32:29) (Detached)
2 Sockets in /run/screen/S-goubuntu.
Если нужно подключиться к сеансу с идентификатором 16648, выполните команду
$ screen -r 16648
Метод 2 - tmux
Утилита tmux
представляет собой мультиплексор терминала (мы писали о нём ранее
), который позволяет создавать несколько терминалов, доступ к которым осуществляется с одного экрана. Сеансы tmux можно отключать от экрана, при этом они будут продолжать работать в фоновом режиме. Впоследствии к отключенным сеансам можно вернуться, точно так же, как и в случае с утилитой Screen
. Для того, чтобы установить tmux
в Ubuntu выполните следующую команду:
$ sudo apt-get install tmux
Для запуска мультиплексора выполните следующую команду:
$ tmux
Для того, чтобы отключиться от сеанса, нажмите в tmux сочетание клавишь Ctrl+b,а затем d. Для получения списка активных сеансов выполните команду
$ tmux ls
В первом столбце будет указан номер сеанса, который нужно указывать при подключении:
$ tmux attach -t 0
Болшее подробную информацию можно найти в руководстве по tmux .
Метод 3 - nohup
Утилита nohup позволяет запускать команды, которые будут выполняться даже после отключения сеанса SSH. Это часть основных утилит GNU, и она уже установлена в системе. Использовать команду очень просто. После входа в удалённую систему достаточно выполнить:
$ nohup <команда> &
И этого достаточно. Теперь можно закрыть закрыть сеанс SSH, удаленная задача будет продолжать выполняться.
По умолчанию, вывод запущенной команды будет добавляться к файлу ‘nohup.out’. Можно, конечно же, изменить файл, в который будет осуществляться вывод. Например, вот так:
$ nohup find -size +10M > log.txt &
Эта команда найдёт все файлы размером больше 10 Мб и запишет вывод в файл log.txt. На сегодня всё, если у вас остались вопросы - пишите их в комментариях.