ГлавнаяОперационные системыLinuxЧто такое Nohup и как его использовать?

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

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

Что такое Nohup?

Пример Нохупа

nohup— сокращение от «Без зависаний». Это не команда, которую вы выполняете сама по себе. nohup— это дополнительная кома

Что такое Nohup?

теме Linux не останавливать команду после ее запуска. Он будет работать до тех пор, пока не завершится, даже если пользователь, запустивший его, выйдет из системы. Он служит той же цели, что и tmux или экран : позволяет вам запустить процесс и не беспокоиться о том, завершится ли он, если вы выйдете из системы или отключитесь от сервера.

Синтаксис nohupпрост и выглядит примерно так:

nohup sh your-script.sh &

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

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

Совет: обратите внимание на другие способы запуска команд bash в фоновом режиме .

Nohup.out

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

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

Выход Nohup

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

nohup sh your-script.sh > /path/to/custom.out &

Пользовательский вывод содержит те же данные, что и стандартный файл «nohup.out», и подходит для сценария аудита безопасности, упомянутого выше. Вы можете назвать его «audit-script-output.txt» в какой-нибудь подключенной удаленной папке и просматривать состояние безопасности этого сервера, не выходя из собственного ноутбука, вместо того, чтобы целый день просматривать выходные данные cat.

Даже обычным обычным пользователям может быть полезно указать собственный выходной файл, поскольку это позволит вам четко различать выходные данные. Если вы используете эту команду несколько раз из папки по умолч

Nohup.out

з указания выходного файла, «nohup.out» просто добавит себя со всеми выходными данными, создавая некоторый беспорядок. Если вы хотите организованно читать выходные данные команды, указание собственных имен файлов для каждого вывода дает вам возможность сделать это по-своему!

Чем Nohup отличается от демона?

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

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

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

Запуск процесса с помощью Nohup

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

Помните, что вы должны отсоединить свой процесс от активной подсказки, чтобы можно было закрыть терминал без внезапного закрытия потерять процесс .

Например, чтобы открыть Kate (мой текстовый редактор) в моей системе и отсоединить его от терминала, сохраняя при этом журнал с помощью «kate.log», я бы набрал следующее:

nohup kate > kate.log &

После закрытия терминала Кейт все еще работает.

Нохуп Кейт

Если бы возникла проблема с запуском приложения, я мог бы просто открыть «kate.log» и выяснить, что не так, прямо из терминала:

cat kate.log
Журнал ошибок Nohup

Этот процесс полезен для определения наличия проблемы с приложением, которое отказывается запускаться или ведет себя нестабильно. Когда вы обычно запускаете такую ​​программу, как браузер, ее сигналы об ошибках часто игнорируются. Запуск их в терминале с nohupи передача вы

Чем Nohup отличается от демона?

олее четкое представление о том, что может вызывать проблемы.

Выполнение нескольких команд с помощью Nohup

Поскольку через nohupможно передать любую команду, вы также можете передать последовательность команд. Чтобы сделать это правильно, вам придется сначала вызвать оболочку и передать команды в виде строки, поскольку большинство эмуляторов терминала интерпретируют каждую команду после первой как не имеющую предшествования nohup.

Каждые в современном дистрибутиве Linux установлен bash , поэтому мы игнорируем другие пользовательские оболочки и используем его для этого примера:

nohup bash -c 'command1 && command2' &

В этой команде мы вызвали bash для выполнения команды и связали их двойным амперсандом (&&). Мы говорим nohup: «Запустите bash с флагом -c(выполнить) и передайте ему эту строку, заключенную в одинарные кавычки». Затем мы приказываем терминалу освободить подсказку, пока вся эта последовательность выполняется в фоновом режиме.

Часто задаваемые вопросы

Мое приложение по-прежнему закрывается, когда я закрываю терминал. Что мне делать?

Дважды проверьте, что вы ввели амперсанд (&) после команды. Если он все еще закрывается при закрытии терминала, попробуйте запустить его еще раз. Затем в новой строке введите: disown

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

Запуск процесса с помощью Nohup

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

Отказ от этого гарантирует, что этого не произойдет.

А как насчет команд, требующих ввода пароля root и других данных?

Мы не рекомендуем запускать команду, требующую ввода с терминала или от корневой доступ до nohup. Если вам абсолютно необходимо, прочитайте руководство к команде, которую вы хотите запустить, и посмотрите, есть ли возможность пропустить подтверждения. Например,. чтобы просто запустить менеджер пакетов в Arch Linux без подтверждений, используйте его флаг --noconfirm.

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

Почему nohup перенаправляет stderr на stdout?

Когда вы запустите команду через nohup, вы получите следующий результат: nohup: игнорирование ввода и перенаправление stderr на stdout

Это означает, что вы больше не сможете отправлять входные данные терминала на только что выполненную команду, и все данные, которые обычно проходят через ваш терминал, будут перенаправлены в один поток (stdout), а затем выведены в файл (по умолчанию «nohup.out»).

Снимки экрана «Что такое Nohup?» и «Nohup.out» от Джон Перкинс и «Запуск процесса с помощью Nohup» от Мигель Лейва-Гомес .

Выполнение нескольких команд с помощью Nohup

Часто задаваемые вопросы

Мое приложение по-прежнему закрывается, когда я закрываю терминал. Что мне делать?

А как насчет команд, требующих ввода пароля root и других данных?

Почему nohup перенаправляет stderr на stdout?

ПОХОЖИЕ СТАТЬИ

Популярные записи