Вопрос
Я запустил команду в сеансе ssh и хотел бы, чтобы она работала даже после выхода из сеанса ssh.
Есть ли способ предотвратить завершение процесса после выхода из сеанса, выполняющего этот процесс?
Ответ
Есть два способа сделать это:
- nohup – запустить новый процесс, который может работать в фоновом режиме даже после закрытия терминала.
- disown – Может использоваться, когда процесс уже запущен, и вы не использовали nohup для его запуска.
Давайте рассмотрим простой пример длинной команды, такой как «sleep», чтобы проверить оба параметра.
Использование nohup
Синтаксис использования команды nohup:
# nohup [command] > /tmp/command.out 2>&1
Переадресация команды является необязательной опцией.
По умолчанию, если вы не предоставляете перенаправление вывода, вывод команды сохраняется в том же каталоге с именем файла nohup.out.
Например:
# nohup sleep 4 appending output to nohup.out
Вы также можете запустить команду в фоновом режиме вместе с параметром nohup, если хотите получить доступ к терминалу.
Например:
# nohup sleep 100 &
Использование disown
Выполните следующие шаги, если эта команда уже запущена без nohup:
1. Предположим, что вы выполнили команду «sleep 100» без nohup, как показано ниже:
# sleep 100
2. Нажмите Ctrl + Z, чтобы остановить команду и получить доступ к оболочке.
Выполните команду bg в командной строке для отправки команды в фоновом режиме.
Запишите идентификатор задания соответствующей команды.
3. Предотвратите SIGHUP соответствующей команде при выходе из оболочки.
Используйте синтаксис ниже:
# disown -h [job-ID]
Например, в нашем случае у нас есть идентификатор задания 1, поэтому команда будет:
# disown -h %1