Введение
nohup — это команда Unix и Unix-подобных операционных систем и, в более общем смысле, систем POSIX, которая выполняет другую команду, заставляя ее игнорировать сигнал SIGHUP (зависание), чтобы позволить продолжить выполнение даже в случае отказа. отсоединение от терминала или закрытие эмулятора терминала.
SIGHUP — это сигнал, посылаемый процессу, когда его терминал управления закрыт.
Обычно, когда вы запускаете команду через SSH, если соединение потеряно или отключено, сеанс SSH завершается, и все команды, выполняемые с терминала, прекращаются.
Сервер Nohup, чтобы избежать прерывания команд. Он будет игнорировать все сигналы зависания, и команды будут продолжать работать.
Как использовать команду nohup
Синтаксис команды nohup следующий:
nohup COMMAND [ARGS]
Команда не принимает никаких других опций, кроме стандартных --help и --version.
Давайте посмотрим на следующий пример:
nohup mycomand
Вы должны получить выходное сообщение, подобное следующему:
nohup: ignora input e aggiunge output a 'nohup.out'
nohup запустит команду mycommand на переднем плане и перенаправит вывод команды в файл nohup.out.
Этот файл будет создан в текущем рабочем каталоге.
Если пользователь, запускающий команду, не имеет прав на запись в рабочий каталог, файл будет создан в домашнем каталоге пользователя.
Если вы закроете терминал, команда не будет завершена.
Запуск команды в фоновом режиме
Использование nohup на переднем плане не очень полезно, так как вы не сможете взаимодействовать с оболочкой, пока команда не завершится.
Чтобы запустить nohup в фоновом режиме, добавьте символ & в конец команды:
nohup mycomand &
Когда вы запускаете команду в фоновом режиме, идентификатор процесса оболочки (в круглых скобках) и идентификатор процесса будут напечатаны на терминале: Вы должны получить выходное сообщение, подобное следующему:
[1] 13265
Если по какой-то причине вы хотите убить процесс, используйте команду kill, за которой следует идентификатор процесса:
kill -9 13265
Перенаправление вывода в файл
По умолчанию nohup перенаправляет вывод в файл nohup.out. Если вы хотите перенаправить вывод команды в другой файл, вы можете использовать стандартное перенаправление оболочки.
Например, чтобы перенаправить стандартный вывод и стандартную ошибку в файл mycommand.out, мы будем использовать:
nohup mycommand > mycommand.out 2>&1 &
Чтобы перенаправить стандартный вывод и стандартную ошибку в разные файлы:
nohup mycommand > mycommand.out 2> mycommand.err &
Альтернативы
Существует ряд альтернативных программ, которые можно использовать, чтобы избежать закрытия команды при закрытии терминала или выходе из системы.
Экран Screen или GNU Screen — это программа-мультиплексор терминалов, которая позволяет вам запускать сеанс screen и открывать любое количество окон (виртуальных терминалов) в рамках этого сеанса.
Процессы, запущенные на экране, будут продолжать работать, когда их окно не видно, даже если вы выйдете из системы.
Для получения дополнительной информации: Как использовать команду Screen для сеансов в Linux.
Tmux Tmux — это современная альтернатива экрану GNU. С Tmux вы также можете создать сеанс и открыть несколько окон в рамках этого сеанса. Сеансы Tmux являются постоянными, что означает, что программы, запущенные в Tmux, будут продолжать работать, даже если вы закроете терминал.
Отречься disown — это встроенная оболочка, которая удаляет задание оболочки из-под контроля над заданием оболочки. В отличие от nohup, вы также можете использовать Disown для запущенных процессов.
Вывод
К настоящему времени вы должны хорошо понимать, как использовать команду nohup, чтобы предотвратить завершение команд при выходе из терминала или выходе из него.