Что такое Nohup и как его использовать?

nohup-running

В системах Linux доступно множество команд. Некоторые из них вы будете использовать несколько раз в день, а другие, как правило, зарезервированы для особых случаев. Nohup - одна из таких команд. Вы не будете использовать его каждый день, но будете благодарны, когда он вам понадобится.

Что такое Nohup?

Nohup

Nohup - это сокращение от "No Hangups". Это не команда, которую вы запускаете сама по себе. Nohup - это дополнительная команда, которая сообщает системе Linux не останавливать другую команду после ее запуска. Это означает, что он будет работать до тех пор, пока не будет выполнен, даже если пользователь, запустивший его, выйдет из системы. Синтаксис nohup прост и выглядит примерно так:

Обратите внимание на "&" в конце команды. Это перемещает команду в фоновый режим, освобождая терминал, в котором вы работаете.

Nohup работает практически с любой командой, которую вы запускаете в терминале. Его можно запускать с помощью пользовательских сценариев, а также стандартных системных команд и утилит командной строки.

Nohup.out

Поскольку nohup может работать независимо от пользователя, запустившего его, команде нужно где-то выводить сообщения или ошибки. Поскольку нет терминала, который можно было бы связать с ним, nohup записывает все в выходной файл nohup.out.

По умолчанию этот файл находится в любом каталоге, в котором вы запустили команду. Nohup.out в некоторой степени уникален, потому что он содержит как стандартный вывод, так и вывод ошибок вместе. По умолчанию Nohup перенаправляет оба файла в один и тот же файл.

Пользовательский вывод Nohup

Однако необязательно использовать nohup.out. Это просто значение по умолчанию. Вы можете указать настраиваемый вывод при запуске nohup и разместить его в настраиваемом месте.

Пользовательский вывод содержит точно те же данные, что и стандартный файл nohup.out.

Различия с демонами

К этому моменту вы, вероятно, задаетесь вопросом, что отличает nohup от демонизированного процесса. В конце концов, кажется, что они оба служат одной и той же цели, но на самом деле это не так. Демоны постоянно работают в фоновом режиме. Их лучше всего зарезервировать для процессов, из которых вы не хотите выходить, например для серверов. Для их программирования также требуется больше работы, поэтому они не подходят для простых одноразовых скриптов.

Nohup предназначен для одноразового использования. Подумайте о сценарии, выполнение которого займет много времени, но в конечном итоге все равно завершится. Может быть, вы время от времени выполняете длинную и сложную задачу, на выполнение которой уходит часы. Вы не хотите, чтобы терминал оставался открытым или пользователь вошел в систему, поэтому вы используете nohup, чтобы он работал в фоновом режиме. В качестве дополнительного бонуса он автоматически регистрирует все за вас.

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

Один комментарий

  1. Извините, но ваша фраза:

    "Nohup - это дополнительная команда, которая сообщает системе Linux не останавливать другую команду после ее запуска"

    не совсем правильно и как-то вводит в заблуждение. "Nohup" - это команда, цель которой "замаскировать" сигнал SIGHUP… вот и все.
    Завершение работы управляющего терминала отправит SIGHUP всем процессам, подключенным к этому терминалу. Как следствие, использование "nohup" будет игнорировать сигнал, и процесс будет изменен на процесс "init" (его управляющий терминал).

    https://en.wikipedia.org/wiki/SIGHUP

    Поскольку SIGHUP иногда используется для указания процессу перечитать файл конфигурации, использование "nohup" может иметь неожиданные побочные эффекты!

Комментарии закрыты.