Команда nohup
выполняет другую программу, указанную в качестве аргумента, и игнорирует все сигналы SIGHUP
(зависание). SIGHUP
— это сигнал, который отправляется процессу, когда его управляющий терминал закрыт.
Обычно, когда вы запускаете программу через SSH, если ваше соединение разрывается или вы выходите из системы, сеанс завершается, и все процессы, выполняемые с терминала, останавливаются. Здесь пригодится команда nohup
. Он игнорирует все сигналы зависания, и процесс продолжит работу.
Содержание
Как использовать команду nohup
Синтаксис команды nohup
следующий:
nohup COMMAND [ARGS]
Команда не принимает никаких других параметров, кроме стандартных --help
и --version
.
Давайте посмотрим на следующий пример:
nohup mycommand
nohup: ignoring input and appending output to 'nohup.out'
nohup
запускает команду mycommand
на переднем плане и перенаправляет вывод nohup.out
файл nohup.out
. Этот файл создается в текущем рабочем каталоге . Если пользователь, выполняющий команду, не имеет прав на запись в рабочий каталог, файл создается в домашнем каталоге пользователя.
Если вы выйдете из системы или закроете терминал, процесс не завершится.
Запуск команды в фоновом режиме
Использование nohup
на переднем плане не очень полезно, потому что вы не сможете взаимодействовать с оболочкой, пока команда не завершится.
Чтобы запустить команду в фоновом режиме , добавьте символ &
в конце команды:
nohup mycommand &
Вывод включает идентификатор задания оболочки (в скобках) и идентификатор процесса:
[1] 25177
Вы можете использовать идентификатор задания, чтобы вывести команду на передний план с помощью команды fg
.
Если по какой-то причине вы хотите прервать процесс, используйте команду kill
за которой следует идентификатор процесса:
kill -9 25132
Перенаправление вывода в файл
По умолчанию nohup
перенаправляет вывод nohup.out
файл nohup.out
. Если вы хотите перенаправить вывод в другой файл, используйте стандартное перенаправление оболочки.
Например, чтобы перенаправить стандартный вывод и стандартную ошибку на mycommand.out
вы должны использовать:
nohup mycommand > mycommand.out 2>&1 &
Чтобы перенаправить стандартный вывод и стандартную ошибку в разные файлы:
nohup mycommand > mycommand.out 2> mycommand.err &
Альтернативы
Есть несколько альтернативных программ, которые можно использовать, чтобы избежать завершения команды при закрытии терминала или отключении.
Screen
Экран или GNU Screen — это программа-мультиплексор терминала, которая позволяет запускать сеанс экрана и открывать любое количество окон (виртуальных терминалов) внутри этого сеанса. Процессы, запущенные в Screen, будут продолжать работать, если их окно не отображается, даже если вы отключитесь.
Tmux
Tmux — это современная альтернатива экрану GNU. С помощью Tmux вы также можете создать сеанс и открыть несколько окон внутри этого сеанса. Сеансы Tmux являются постоянными, что означает, что программы, запущенные в Tmux, будут продолжать работать, даже если вы закроете терминал.
disown
disown
— это встроенная оболочка, которая удаляет задание оболочки из управления заданиями оболочки. В отличие от nohup
, вы также можете использовать disown
для запущенных процессов.
Выводы
nohup
позволяет предотвратить завершение выполнения команд при выходе из системы или выходе из терминала.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
При использовании nohup bush script.sh куда логируется выполнение.
Будет ли запуск логироваться в syslog?