Часто бывает ситуация, когда нужно запустить какую-либо программу в терминале на длительное время (например, стресс тест сервера), если программу просто запустить в терминале, то после закрытия терминальной сессии запущенная программа также прекращает работать. Для того что бы программа продолжада работать после закрытия терминальной сессии, нужно ее запустить с помощью утелиты nohup
Программа nohup запускает COMMAND таким образом, что она игнорирует сигнал hangup, что позволяет ей продолжать работу и после выхода из терминала. Также, она перенаправляет весь вывод программы в файл $HOME/nohup.out и понижает приоритет выполняемой программы.
Похожие записи:
- VestaCP установка и настройка
- Настройка сети в Linux – команда ifconfig
- Утилита wget в Linux
- Перенаправление потоков в Linux. Вывод команды в файл
Понравилась статья? Поделиться с друзьями:
Источник: itproffi.ru
Использование и настройка утилиты screen
Команда Nohup в Linux позволяет запускать команды даже после выхода из системы
В кратце: эта статья покажет вам, как вы можете запустить процесс и поддерживать его работу даже после того, как вы вышли из системы с помощью команды nohup.
Nohup означает «no hang up». Это чрезвычайно полезная команда для запуска процесса даже после выхода из системы.
Одно из наиболее распространенных применений можно найти в выполнении команд, требующих времени, через соединение SSH. Если вы считаете, что ваш SSH-сеанс может прерваться, вы можете использовать команду с nohup следующим образом:
Что такое команда nohup?
Nohup можно рассматривать как обертку. Префикс вашей команды с nohup:
nohup COMMAND ARGS .
Цель Nohup в том чтобы перехватить и предотвратить SIGHUP сигналы от достижения команды.
Nohup сначала попытается перенаправить вывод в ./nohup.out или отправит его в ~/nohup.out, если это будет необходимо. Вы также можете решить, куда перенаправить вывод следующим образом:
nohup COMMANDS >/path/to/output/file
О nohup говорить особо нечего, у него нет длинного списка опций. Есть только –help и –version.
Пример использования команды Nohup
Выполнение скрипта с помощью nohup так же просто, как это.
nohup ./nhp.sh
Обратите внимание, что nohup не развил процесс в фоновом режиме. Nohup предназначен только для перехвата сигналов SIGHUP. После запуска команды вы можете продолжить и закрыть свой терминал. Он предупредит вас, что процесс запущен. Подтвердите, что хотите убить его.
Linux — запуск процессов в фоновом режиме | UnixHost
Когда вы закрыли свой терминал, все дочерние процессы получили сигнал SIGHUP. Nohup помешал этому сигналу достичь нашей команды. На следующем рисунке показана информация о нашей команде, пока терминал еще работал.
Вы видите PPID? Это идентификатор родительского процесса. Когда вы запросили закрыть терминал, все дочерние элементы PPID получили сигнал SIGHUP. Nohup не дал этому сигналу дойти до нашего сценария. Родительский процесс завершен, и наш сценарий осиротел.
Когда процесс становится осиротевшим, он автоматически получает 1 (systemd или init) в качестве родителя.
Как видите, продемонстрировать использование nohup не сложно. Очень простая команда. Вы можете разветвлять процесс в фоновом режиме следующим образом:
nohup ./nhp.sh /path/to/file
Одна из распространенных проблем заключается в том, что иногда SSH «зависает» при выходе из системы. Это связано с тем, что SSH часто отказывается терять любой поток данных в фоновые процессы и из них. Затем он будет «зависать», пока процесс не будет завершен.
Эту проблему часто можно решить, перенаправив все 3 потока данных.
nohup COMMAND >./nohup.out 2>./nohup.err
Команда nohup в Linux
Команда 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 на переднем плане не очень полезно, потому что вы не сможете взаимодействовать с оболочкой, пока команда не завершится.
Чтобы запустить команду в фоновом режиме , добавьте символ
Вывод включает идентификатор задания оболочки (в скобках) и идентификатор процесса:
[1] 25177
Вы можете использовать идентификатор задания, чтобы вывести команду на передний план с помощью команды fg .
Если по какой-то причине вы хотите прервать процесс, используйте команду kill за которой следует идентификатор процесса:
kill -9 25132
Перенаправление вывода в файл
По умолчанию nohup перенаправляет вывод nohup.out файл nohup.out . Если вы хотите перенаправить вывод в другой файл, используйте стандартное перенаправление оболочки.
Например, чтобы перенаправить стандартный вывод и стандартную ошибку на mycommand.out вы должны использовать:
nohup mycommand > mycommand.out 2>
Чтобы перенаправить стандартный вывод и стандартную ошибку в разные файлы:
nohup mycommand > mycommand.out 2> mycommand.err https://routerus.com/linux-nohup-command/» target=»_blank»]routerus.com[/mask_link]