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?

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

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

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 устанавливает им атрибуты доступа только для владельца этих файлов (группа и остальные пользователи не имеют прав доступа к этим файлам). Если же эти файлы уже существуют, то их права доступа не изменяются.

Читайте также:  Как удалить драйвера сетевой карты windows 10

Команда 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 , это, вероятно, означает, что вы хотите запустить команду в фоновом режиме, поставив другой & в конце всего процесса:

Читайте также:  Активатор windows 10 через реестр

В 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 , но предполагает, что вывод уже перенаправлен туда, куда хочет пользователь.

Читайте также:  Samsung m2070w �������� mac os

Источник

nohup «не работает» MPIrun

Я пытаюсь использовать команду «nohup», чтобы избежать прерывания фонового процесса при выходе из терминала в linux MATE.

Я хочу запустить процесс MPIrun, и я использую следующую команду:

Когда я выхожу из терминала, процессы, запущенные на разных ядрах, прекращаются.

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

А затем CTRL + Z (остановка процесса) файл журнала указывает:

И я не могу остановить команду mpirun. Думаю, я чего-то не понимаю в том, что делаю

2 ответа

Задание, выполняемое в фоновом режиме, по-прежнему принадлежит вашей оболочке входа в систему (команда nohup не завершается до завершения команды mpirun ), поэтому она получает сигнал при отключении. Я использую этот скрипт (я называю его bk ):

(Если вас интересует любопытство, обратите внимание на осторожное использование $* и «$@» . nice выполняет задание с более низким приоритетом, когда меня нет рядом. И версия 1.1 была проверена в управление версиями — SCCS в то время — 10 августа 1987 г.)

Для вашего процесса вы должны запустить:

Подсказка возвращается почти сразу. Ключевые различия между тем, что находится в этом коде, и тем, что вы делаете прямо из командной строки:

  1. Для сценария оболочки есть подпроцесс, который сразу же завершается.
  2. Сам сценарий запускает команду во вспомогательной оболочке в фоновом режиме.

Между ними это означает, что ваша оболочка входа в систему не вмешивается в процесс; он не знает о процессе внуков.

Запустив прямо из командной строки, вы должны написать:

Скобки начинают подоболочку; суб-оболочка запускает nohup в фоновом режиме с перенаправлением ввода-вывода и завершает работу. Команда continue — это внук вашей оболочки входа, и ваша оболочка входа в нее не вмешивается.

Я не эксперт в mpirun , никогда не использовал его, так что есть шанс, что он сделает что-то, чего я не ожидал. Мое впечатление от страницы руководства таково, что он действует более или менее как обычный процесс, хотя он может запускать несколько других процессов, возможно, на нескольких узлах. То есть он запускает другие процессы, но контролирует и координирует их и завершает работу только после завершения своих дочерних процессов. Если это верно, то то, что я изложил, достаточно точно.

Чтобы убить процесс, вам понадобится следующая команда. первый:

Это дает вам PID процесса, подобного этому

[1]+ 47274 Running nohup mpirun -np 8 solverName -parallel >log 2>&1

Затем выполните следующую команду, чтобы убить процесс.

Это поможет вам убить процесс.

Обратите внимание, что ctrl + Z не останавливает процесс, а приостанавливает его.

Для первой части вопроса я рекомендую попробовать эту команду и посмотреть, работает она или нет.

nohup nohup mpirun -n 8 —your_flags ./compited_solver_name > Output.txt &

У меня это сработало. сообщите нам, если это не сработает для вас.

Источник

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