Команда nohup в Unix/Linux


nohup — утилита, которая позволяет запустить команду, защищенную от зависания с выходом на non-tty (игнорирует потерю сигналов связи SIGHUP). Если стандартным выводом (stdout) команды является терминал, то он и стандартный вывод ошибок (stderr) перенаправляются с добавлением в файл «nohup.out» в текущей директории; если это невозможно сделать, то перенаправление происходит в файл «$HOME/nohup.out». Если и это невозможно сделать, то команда не запускается совсем. При создании файлов «nohup.out» или «$HOME/nohup.out» команда nohup устанавливает им атрибуты доступа только для владельца этих файлов (группа и остальные пользователи не имеют прав доступа к этим файлам). Если же эти файлы уже существуют, то их права доступа не изменяются.
Команда nohup в Unix/Linux
Некоторая работа или команда занимает много времени. Если вы не уверены, когда закончится задание, лучше оставить работу в фоновом режиме. Все процессы (кроме at и batch), выполняют завершение при выходе из системы. Утилита nohup дает возможность, чтобы при выходе из системы процесс продолжал работу в фоновом режиме. Например:
# nohup command Arg(s) &
- command: Это имя скрипта или клманды которую запускаете. Так же, вы можете передать аргумент(ы) команде или скрипту.
- Arg(s) — Это аргумент(ы) для команды или скрипта( можно не прописывать).
- & : Чтобы nohup работал в фотоновом режиме, используйте & символ.
Приведу очень наглядный пример. Допустим, вам нужно выполнить grep по определенному слову «ddos» и при поступлении данных ( допустим ДДОС или что-то еще), то можно запустить grep с нужным словом для поиска в фоновом режиме. Он будет находить нужные слова и записывать в определенный файл:
# nohup grep ddos * > /home/captain/ddos.txt &
# nohup cat /var/log/nginx/access.log| grep "admin" > /home/captain/bruteforce.txt &
И смотрим на процесс:
# ps -aux | grep nohup
Вы можете завершить команду nohup с помощью команды kill.
Вот еще пример того, как можно запускать сервер nginx в фоновом режиме:
# nohup service nginx start > /dev/null 2>&1&
В этом примере я собираюсь найти все утилиты/скрипты с setuid битом:
# nohup find / -xdev -type f -perm +u=s -print > /home/output.txt &
Обратите внимание, что nohup не изменяет приоритет ; Для этого используйте «nice» команду:
# nohup nice -n -5 ls / > /home/some_output.txt &
Опции nohup в Unix/Linux
Чтобы вывести помощь:
$ nohup --help
Для отображения версии, используйте:
$ nohup --version
А на этом, у меня статья «Команда nohup в Unix/Linux» подошла к завершению.
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
Рубрики
- Arch Linux (167)
- Commands (36)
- Debian’s (635)
- Administration tools Ubuntu (37)
- Backups Debian’s (7)
- Database в Ubuntu (58)
- Games (игры) (1)
- Monitoring в Debian и Ubuntu (49)
- Virtualization в Ubuntu / Debian/ Linux Mint (41)
- Docker (22)
- Kubernetes (6)
- KVM (4)
- OpenVZ (3)
- Vagrant (5)
- VirtualBox (6)
- ArgoCD (1)
- Concourse (1)
- Gitlab (1)
- Jenkinks (4)
- Spinnaker (1)
- Apache (32)
- Cherokee (1)
- FTP-services (5)
- Lighttpd (1)
- Nginx (26)
- PHP (27)
- Proxy для Debian’s (2)
- Tomcat (4)
- Панели управления в Ubuntu/Debian/Mint (24)
- Установка и настройка почты на Ubuntu/Debian (12)
- Хранилища (clouds) (2)
- Administration tools freeBSD (19)
- Database во FreeBSD (52)
- Monitoring во freeBSD (37)
- Virtualization во FreeBSD (22)
- VoIP (1)
- Установка Web сервисов (91)
- Установка и настройка почты (6)
- Установка из ports (пакетов) (19)
- Установка из sorce code (исходников) (23)
- Непрерывная интеграция (CI) (27)
- Database в MacOS (36)
- Monitoring в Mac OS (31)
- Security (безопасность) (12)
- Virtualization в Mac OS (30)
- Docker (19)
- Kubernetes (6)
- Vagrant (5)
- VirtualBox (5)
- ArgoCD (1)
- CircleCI (1)
- Concourse (1)
- Gitlab (1)
- Jenkinks (4)
- Spinnaker (1)
- Administration tools CentOS (49)
- Backups RPM’s (4)
- Database в CentOS (68)
- Monitoring в CentOS (67)
- Virtualization в CentOS/ Red Hat/ Fedora (42)
- Docker (23)
- Kubernetes (6)
- KVM (5)
- OpenVZ (2)
- Vagrant (5)
- VirtualBox (6)
- VMWare (3)
- ArgoCD (1)
- Concourse (1)
- Gitlab (1)
- Jenkinks (4)
- Spinnaker (1)
- Apache (35)
- Cherokee (1)
- DNS (3)
- FTP (10)
- Nginx (33)
- PHP (34)
- Proxy для RedHat’s (2)
- Tomcat (2)
- Voice (2)
- Панели управления в CentOS/Red Hat/Fedora (27)
- Прокси сервер на CentOS/RHEL/Fedora (4)
- Установка и настройка почты на CentOS/RHEL/Fedora (14)
- Хранилища (clouds) (1)
соц сети



Архив новостей
Свежие записи
- Pull/Push AWS ECR образов через AWS Route53 CNAME 17.11.2021
- openpgp: signature made by unknown entity в Terraform 09.11.2021
- Установка Terraformer в Unix/Linux 31.05.2021
- Установка ArgoCD в Unix/Linux 06.01.2021
- Установка tfswitch в Unix/Linux 08.12.2020
Свежие комментарии
- Александр к записи Закомментировать/Раскомментировать строки vi/vim в Unix/Linux
- Иван Сбисин к записи Удалить все содержимое файла (очистить файл) в Unix/Linux
- Ликс к записи Не сохранять команду в history bash
- Alf к записи Команды mail/mailx в примера на Unix/Linux
- Глеб к записи Установка Adobe Flash Player в Debian/Ubuntu/Mint
Как посмотреть nohup процессы
Все процессы, за исключением at и batch , завершаются, когда вы выходите из системы. Если вы хотите, чтобы после вашего выхода из системы процесс в фоновом режиме продолжал выполняться, то вам необходимо использовать команду nohup . Команда nohup имеет следующий формат:
nohup command &
Предположим, вы хотите, чтобы команда grep осуществила поиск во всех файлах в вашем текущем каталоге строки «word» и перенаправила вывод в файл word.list, и затем, не ожидая завершения, вы хотите выйти из системы, то введите следующую строку:
nohup grep word * > word.list &
Вы можете завершить команду nohup с помощью команды kill .
Alex Otwagin 2002-12-16
Команды Linux: как работает nohup
При выходе из оболочки системы Linux все запущенные процессы обычно завершаются или зависают. Но что делать, если вы хотите, чтобы процессы работали даже при выходе из оболочки/терминала? В этом вам поможет команда nohup.
Nohup — это сокращение от no hangup. Эта команда поддерживает в системах Linux работу процессов даже после выхода из оболочки или терминала. Она предотвращает получение процессами или заданиями сигнала SIGHUP ( Signal Hang UP ). Это сигнал, который отправляется процессу при закрытии или выходе из терминала. В этом руководстве мы рассмотрим команду nohup и покажем, как ее можно использовать.
Синтаксис команды nohup
Синтаксис команды выглядит следующим образом:
nohup command arguments
Давайте же посмотрим, как работает данная команда.
Проверка версии nohup
Вы можете начать с проверки версии Nohup, используя приведенный ниже синтаксис.

Запуск процесса с помощью Nohup
Если вы хотите, чтобы ваши процессы/задания работали даже после закрытия терминала, укажите необходимую команду в nohup, как показано ниже. Задания будут по-прежнему выполняться и не будут уничтожены при выходе из оболочки или терминала.

Согласно приведенному выше выводу результат команды был сохранен в nohup.out. Чтобы убедиться в этом, запустите:
Кроме того, вы можете перенаправить вывод в другой файл, как показано ниже.
nohup ./hello.sh > output.txt
Чтобы просмотреть этот файл, введите:

Чтобы перенаправить в файл и стандартную ошибку, и вывод, используйте атрибут > filename 2>&1 , как показано ниже.
nohup ./hello.sh > myoutput.txt >2&1

Запуск процесса в фоновом режиме
Чтобы запустить процесс в фоновом режиме, используйте символ & в конце команды. В этом примере мы пингуем google.com и отправляем этот процесс в фоновый режим.
nohup ping google.com &

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

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

Заключение
Все процессы, запущенные с помощью команды nohup, будут игнорировать сигнал SIGHUP даже после выхода из оболочки.
Как только задание запущено с помощью команды nohup, стандартный ввод будет недоступен для пользователя.
По умолчанию nohup.out используется как стандартный файл для stdout и stderr.
Команда 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. После запуска команды вы можете продолжить и закрыть свой терминал. Он предупредит вас, что процесс запущен. Подтвердите, что хотите убить его.

Когда вы закрыли свой терминал, все дочерние процессы получили сигнал SIGHUP. Nohup помешал этому сигналу достичь нашей команды. На следующем рисунке показана информация о нашей команде, пока терминал еще работал.

Вы видите PPID? Это идентификатор родительского процесса. Когда вы запросили закрыть терминал, все дочерние элементы PPID получили сигнал SIGHUP. Nohup не дал этому сигналу дойти до нашего сценария. Родительский процесс завершен, и наш сценарий осиротел. Когда процесс становится осиротевшим, он автоматически получает 1 (systemd или init) в качестве родителя.

Как видите, продемонстрировать использование nohup не сложно. Очень простая команда. Вы можете разветвлять процесс в фоновом режиме следующим образом:
nohup ./nhp.sh &
Вы также можете решить, куда будет перенаправлен вывод:
nohup ./nhp.sh >/path/to/file &
Обратите внимание, что если вы выключите или перезагрузите систему Linux, она убьет команду. Когда вы запрашиваете завершение работы или перезагрузку, все процессы получают SIGTERM, а затем SIGKILL . Эти сигналы не будут перехвачены Nohup.
Nohup через соединение SSH
Одно из применений, которое часто приходит на ум сразу, когда вы изучаете nohup — это возможность запуска процесса на удаленном компьютере через SSH. Логично, что выполнение команды с nohup позволит вам выйти из вашего SSH-соединения, и процесс все равно будет запущен.
nohup COMMAND &
Одна из распространенных проблем заключается в том, что иногда SSH «зависает» при выходе из системы. Это связано с тем, что SSH часто отказывается терять любой поток данных в фоновые процессы и из них. Затем он будет «зависать», пока процесс не будет завершен.
Эту проблему часто можно решить, перенаправив все 3 потока данных.
nohup COMMAND >./nohup.out 2>./nohup.err
Мы надеемся, что эта быстрая статья помогла вам лучше использовать сеансы SSH. Если у вас есть вопросы или предложения, пожалуйста, оставьте комментарий ниже.