Linux nohup не работает

Не работает Nohup на Centos7

Нужно пустить работу Medusa в фон, чтобы работала при отключении от сервера.

запускаюсь через # nohup medusa .

но вместо фона, сразу же получаю отключение от сервера.

Пробую переконнектится и посмотреть

и никаких фоновых процессов не отображается

Вообще лучше юнит написать.

Работает, спасибо (делал так, но в синтаксисе была ошибка).

Однако останавливается после exit

Как выйти с коннекта SSH, чтобы софт не останавливался?

tmux или screen

Не понимаю, как это мне поможет. Зачем мне менеджер терминалов?

Судя по твоему вопросу, никак.

Тогда в screen запускай.

nohup делает detach от текущей консоли.

& — запускает программу в фоновом режиме.

Обычно я делаю 2 скрипта:

1. Вызываю из rc.local, он содержит вызов второго скрипта с nohup.

2. Второй скрипт вызывает нужную программу с &, после чего делает ещё sleep 10, давая фоновой программе время на успешный запуск.

В таком варианте оно практически гарантированно успешно запустится. Удобно, например, для запуска Х.org и каких-то иксовых программ типа xclock, проигрывателей IPTV и тому подобного.

Источник

Уточнение по утилите nohup

В описании сказано:

UNIX-утилита, запускающая указанную команду с игнорированием сигналов потери связи (SIGHUP). Таким образом, команда будет продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы.

Что значит «команда будет продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы»?

Данная утилита пропишет указанный ей скрипт в автозагрузку, и после перезагрузки или при включении компьютера он (скрипт) будет запускаться после загрузки ОС?

В переводе на современный это значит, что «когда закроешь эмулятор терминала».

Нет конечно. Имеется в виду сессия работы с терминалом.

Нет. Обычно процесс в Unix прекращает работать, если прекратил работать его родительский процесс. То есть обычно когда пользователь выходит из системы, все процессы, что являются потомками его сессии, останавливаются. Но если их запустить с nohup, то на них это правило не действует. Естественно, это не имеет отношения к автозагрузке и при выключении такой независимый процесс все равно будет остановлен.

Наиболее типичный случай: ты заходишь в систему по ssh и запускаешь фоновый процесс через nohup, после чего выходишь и процесс продолжает работать, а не убивается SIGHUP’ом.

То же самое работает и с локальным входом через TTY, но этим редко пользуются

когда закроешь эмулятор терминала

Если закрывать эмулятор терминала, то перед этим надо еще disown процессу сделать. Хотя гораздо проще его не закрывать, он что, мешает кому-то

Что значит «команда будет продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы»?

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

Читайте также:  Не работает net speakerphone

Это похоже на то как обрабатывается Ctrl+C, когда процессу посылается сигнал TERM, который можно послать явно выполнив kill -SIGTERM

Процесс на принятый сигнал сам решает что делать. Конечно когда ты собираешь helloworld то компиллер добавит дефолтные обработчики по стандарту. Но ничего не мешает сделать свой кастомный обработчик. Например сервисы/демоны на сигнал HUP просто обновляют свою конфигурацию, т.е. ты обновил конфиг и хочешь чтоб он применился без перезапуска процесса, то можешь послать ему сигнал: kill -SIGHUP

(разумеется это работает если это было предусмотрено, для nginx работает).

Только KILL не дает выбор процессу, kill -9

или kill -SIGKILL

ядро завершит процесс принудительно.

По всему выше написанному должно стать понятно что nohup просто не передает сигнал HUP дочернему процессу.

Ясно. Только непонятно, почему в описании данной утилиты нельзя было так и сформулировать, а не использовать объяснение, допускающее неверное толкование?

Описание составлено в расчёте, что ты понимаешь как всё это устроено. Технически там всё верно написано. В частности про «после перезагрузки или при включении компьютера» там нет ни слова, это ты сам от непонимания нафантазировал.

Источник

Почему не работает фоновый процесс nohup?

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

Когда удаленный сеанс закрыт, процесс завершается с сообщением:

SIGHUP пойман, но не демонизирован. Выход.

Я не понимаю; почему процесс прерывается, когда он запускается в фоновом режиме с помощью nohup & ?

Ваша программа на Python отменяется nohup .

nohup игнорирует сигнал зависания с помощью SIG_IGN и затем загружает вашу программу в том же процессе.

Ваша программа Python быстро сбрасывает обработку сигнала для сигнала зависания, устанавливая свой собственный обработчик сигнала. Этот обработчик проверяет внутреннюю функцию (которая не очень хорошо спроектирована, основываясь на некоторых ошибочных предположениях, если это та, которую я видел) и решает, что надлежащий порядок действий при получении сигнала зависания — распечатать это сообщение. и выход.

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

(Даже этого недостаточно в операционных системах systemd. Поскольку люди, работающие с systemd, чуть-чуть ухватились за ухватку своего механизма сеанса входа в пользовательское пространство, вам также необходимо убедиться, что механизм systemd, который сигнализирует об отключении системы, а не зависает, для сеансы входа в систему при каждом выходе из системы также не включаются.)

Источник

linux-notes.org

nohup — утилита, которая позволяет запустить команду, защищенную от зависания с выходом на non-tty (игнорирует потерю сигналов связи SIGHUP). Если стандартным выводом (stdout) команды является терминал, то он и стандартный вывод ошибок (stderr) перенаправляются с добавлением в файл «nohup.out» в текущей директории; если это невозможно сделать, то перенаправление происходит в файл «$HOME/nohup.out». Если и это невозможно сделать, то команда не запускается совсем. При создании файлов «nohup.out» или «$HOME/nohup.out» команда nohup устанавливает им атрибуты доступа только для владельца этих файлов (группа и остальные пользователи не имеют прав доступа к этим файлам). Если же эти файлы уже существуют, то их права доступа не изменяются.

Читайте также:  Чехол а71 настроить книжку

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

Некоторая работа или команда занимает много времени. Если вы не уверены, когда закончится задание, лучше оставить работу в фоновом режиме. Все процессы (кроме at и batch), выполняют завершение при выходе из системы. Утилита nohup дает возможность, чтобы при выходе из системы процесс продолжал работу в фоновом режиме. Например:

  • command: Это имя скрипта или клманды которую запускаете. Так же, вы можете передать аргумент(ы) команде или скрипту.
  • Arg(s) — Это аргумент(ы) для команды или скрипта( можно не прописывать).
  • & : Чтобы nohup работал в фотоновом режиме, используйте & символ.

Приведу очень наглядный пример. Допустим, вам нужно выполнить grep по определенному слову «ddos» и при поступлении данных ( допустим ДДОС или что-то еще), то можно запустить grep с нужным словом для поиска в фоновом режиме. Он будет находить нужные слова и записывать в определенный файл:

И смотрим на процесс:

Вы можете завершить команду nohup с помощью команды kill.

Вот еще пример того, как можно запускать сервер nginx в фоновом режиме:

В этом примере я собираюсь найти все утилиты/скрипты с setuid битом:

Обратите внимание, что nohup не изменяет приоритет ; Для этого используйте «nice» команду:

Опции nohup в Unix/Linux

Чтобы вывести помощь:

Для отображения версии, используйте:

А на этом, у меня статья «Команда nohup в Unix/Linux» подошла к завершению.

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Источник

Как я могу использовать команду nohup, не получая nohup.вышел?

У меня проблема с командой нохупа.

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

Ответы — Как я могу использовать команду nohup, не получая nohup.вышел? / How do I use the nohup command without getting nohup.out?

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

Заметьте, я не имею никакого отношения к автору программы. Я только удовлетворенный пользователь программы.

Вы пробовали перенаправить все три потока ввода-вывода:

nohup и пишет только для /dev/null , если выход находится в противном случае на клемме. Если вы перенаправляете выходные данные команды куда — то еще — включая /dev/null -это то, куда она идет вместо этого.

Если вы используете nohup , это, вероятно, означает, что вы хотите запустить команду в фоновом режиме, поставив другой & в конце всего процесса:

В Linux запуск задания с nohup также автоматически закрывает его входные данные. В других системах, особенно BSD и macOS, это не так, поэтому при работе в фоновом режиме может потребоваться закрыть ввод вручную. В то время как закрытие ввода не оказывает никакого влияния на создание или нет /dev/null , это позволяет избежать еще одной проблемы: если фоновый процесс пытается прочитать что-либо из стандартного ввода, он будет делать паузу, ожидая, пока вы вернете его на передний план и наберете что-то. Так что экстра-безопасная версия выглядит следующим образом:

Читайте также:  Как починить резиновый ремешок часов

Обратите внимание, однако, что это не мешает команде напрямую обращаться к терминалу и не удаляет ее из группы процессов вашей оболочки. Если вы хотите сделать последнее, и вы запускаете bash, ksh или zsh, вы можете сделать это, запустив disown без аргументов в качестве следующей команды. Это будет означать, что фоновый процесс больше не связан с «заданием» оболочки и не будет иметь никаких сигналов, передаваемых ему из оболочки. (Обратите внимание на различие: процесс disown ed не получает сигналов, автоматически пересылаемых ему родительской оболочкой , но без nohup он все равно будет получать сигнал nohup , отправленный другими средствами, такими как команда ручного HUP . Процесс nohup ‘ed игнорирует все nohup , HUP , 2>>logfile , ) и операторы трубы ( > ) делают.

Труба-самая простая из них. организует так, чтобы стандартный вывод | подавался непосредственно на стандартный ввод command1 | command2 . Это очень удобная схема, которая привела к определенному шаблону проектирования в инструментах UNIX (и объясняет существование стандартной ошибки, которая позволяет программе отправлять сообщения пользователю, даже если ее вывод идет в следующую программу в конвейере). Но вы можете только передать стандартный вывод на стандартный вход; вы не можете отправить любые другие файловые дескрипторы в канал без некоторого жонглирования.

Операторы перенаправления более дружелюбны в том, что они позволяют вам указать, какой файловый дескриптор перенаправлять. Таким command1 считывает стандартный ввод из файла с именем command2 , а 0 добавляет стандартную ошибку в конец файла с именем infile . Если вы не зададите число, то по умолчанию входное перенаправление будет равно fd 0 ( 2>>logfile равно logfile ), а выходное перенаправление-fd 1 ( равно 0 ).

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

Поэтому последовательность 1> означает «направить стандартный вывод в 2>&1 » (который представляет собой специальное устройство, которое просто выбросит все, что вы напишите это) «, а затем отправить стандартное сообщение об ошибке, где стандартный вывод идет» (который мы только что убедились, был 2>&1 ). В принципе, «выбросьте все, что эта команда записывает в любой файловый дескриптор».

Когда nohup обнаруживает, что ни его стандартная ошибка, ни вывод не присоединены к терминалу, он не утруждает себя созданием /dev/null , но предполагает, что вывод уже перенаправлен туда, куда хочет пользователь.

Источник

Оцените статью