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

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

02.05.2012 10:34:45 Просмотров 28 Источник

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

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

У вопроса есть решение - Посмотреть?

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

Dan D.

02.05.2012 10:39:52

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

NAME
       detach - run a command after detaching from the terminal

SYNOPSIS
       detach [options] [--] command [args]

       Forks  a  new process, detaches is from the terminal, and executes com‐
       mand with the specified arguments.

OPTIONS
       detach recognizes a couple of options, which are discussed below.   The
       special  option -- is used to signal that the rest of the arguments are
       the command and args to be passed to it.

       -e file
              Connect file to the standard error of the command.

       -f     Run in the foreground (do not fork).

       -i file
              Connect file to the standard input of the command.

       -o file
              Connect file to the standard output of the command.

       -p file
              Write the pid of the detached process to file.

EXAMPLE
       detach xterm

       Start an xterm that will not be closed when the current shell exits.

AUTHOR
       detach was written by Robbert Haarman.  See  http://inglorion.net/  for
       contact information.

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

https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out/10408872#comment34306359_10408872
Связь не разорвана, и это РЕПО git старое. Это не включает в текущей версии v0.2.3.
Aziz Shaikh

02.05.2012 10:41:25

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

nohup ./yourprogram > foo.out 2> foo.err < /dev/null &
https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out/10408891#comment68776899_10408891
Разве это не должно быть >/dev/null, а не
https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out/10408891#comment83890960_10408891
@ScottChu < /dev/nullперенаправляет стандартный ввод для nohup. Linux этого не требует, но POSIX допускает поведение, при котором nohupне может работать в фоновом режиме, если его стандартный вход подключен к терминалу. Примерами таких систем являются BSD и OS X.
Является ответом!
Mark Reed

02.05.2012 10:42:31

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

 nohup command >/dev/null 2>&1   # doesn't create nohup.out

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

 nohup command >/dev/null 2>&1 & # runs in background, still doesn't create nohup.out

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

nohup command </dev/null >/dev/null 2>&1 & # completely detached from terminal 

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

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

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

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

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

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

Устройство nohupтакже работает для ввода; если вы выполняете команду с nohup.out, то любая попытка этой команды прочитать из стандартного ввода немедленно столкнется с концом файла. Обратите внимание, что синтаксис слияния здесь не будет иметь такого же эффекта; он работает только для указания файлового дескриптора на другой, открытый в том же направлении (вход или выход). Оболочка позволит вам сделать /dev/null, но это приведет к созданию процесса с дескриптором входного файла, открытым в выходном потоке, поэтому вместо того, чтобы просто нажать конец файла, любая попытка чтения вызовет фатальную ошибку "недопустимый дескриптор файла".

https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out/10408906#comment53134610_10408906
Не могли бы вы объяснить 2 и 1 ?
https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out/10408906#comment53134616_10408906
Почему некоторые ответы дают > / dev / null, а некоторые дают >
https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out/10408906#comment57113048_10408906
@user1271772-я добавил подробное объяснение; надеюсь, это поможет.
https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out/10408906#comment59105703_10408906
Что касается nohup, " если процесс позже попытается прочитать что-либо из стандартного ввода, он остановится, ожидая, пока вы вернете его на передний план и наберете что-то.- это кажется неправильным. Вместо nohupзакрывает стандартный ввод (программа не сможет прочитать ни одного ввода, даже если он выполняется на переднем плане. он не остановлен, но получит код ошибки или EOF).
https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out/10408906#comment59106138_10408906
@Tim-этот ответ верен для Linux, но не для BSD или OS X, на которых nohupне закрывает стандартный вход автоматически. Обратите внимание, что nohupэто не оболочка, а двоичная утилита.
https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out/10408906#comment59106305_10408906
nohup-это часть coreutils. Вы имеете в виду, что реализация nohupотличается для linux и для BSD или OS X?
https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out/10408906#comment59106613_10408906
Да. Название "coreutils"относится к пакету GNU. Но в BSD, OS Х, SmartOS/изначально в Solaris использовалась файловая, и многих коммерческих Юниксах - в основном, те, которые были вокруг дольше, чем GNU - не-GNU базовых утилит. awk разные, sed отличается, nohup другая...
https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out/10408906#comment59107923_10408906
Почему вы написали "extra safe" через </dev/null? Также смотрите 0>/dev/nullunix.stackexchange.com/a/266247
https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out/10408906#comment59428972_10408906
Я просто имел в виду"дополнительно обязательно отсоединиться от терминала". Что касается 0>/dev/null, то он, как правило, будет иметь тот же эффект, >/dev/null <&1, о котором я упоминал.
https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out/10408906#comment72968742_10408906
"..полностью отделен от терминала": я запускаю soffice -invisibleиз своего скрипта, используя упомянутый синтаксис, а затем сплю в течение 10. Если я нажму Ctrl-C в течение этого периода, soffice остановится. Замена nohup на setsid сделала его работоспособным.
https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out/10408906#comment72979538_10408906
Он отсоединяется от терминала только в том случае, если программа не прилагает все усилия, чтобы прикрепиться к терминалу. Если программа явно открывает /dev/tty, это может говорить в терминал независимо от того, где stdin, stdoutи stderr указаны.В этом случае, однако, поскольку setsid фиксирует его, похоже, добавленные в процессе группы, содержащей оболочки, а не терминал.
https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out/10408906#comment77198275_10408906
Это самое лучшее. Работает каждый из 3-х способов, идеально подходящих для каждой собственной потребности. тнх
11101101b

22.05.2012 10:59:45

nohup some_command > /dev/null 2>&1&

Это все, что вам нужно сделать!

https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out/10708326#comment13904271_10708326
Был еще один ответ, который почти имел то же самое, но у них не было дополнительного "&" на конце.
https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out/10708326#comment24252674_10708326
&На панели избавит вас от необходимости использовать ctrl-c, если это имеет для вас значение.
https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out/10708326#comment50812010_10708326
Возможность работать в BG очень полезна
https://stackoverflow.com/questions/10408816/how-do-i-use-the-nohup-command-without-getting-nohup-out/10708326#comment74798923_10708326
Это полезно только в том случае, если вы не суетитесь по поводу захвата вывода some_command, включая ошибку.
Kjeld Flarup

13.03.2015 01:35:55

sudo bash -c "nohup /opt/viptel/viptel_bin/log.sh $* &> /dev/null"  &

Перенаправление вывода sudo приводит к тому, что sudo повторно запрашивает пароль, поэтому для выполнения этого варианта необходим неудобный механизм.

Prem S

17.03.2017 07:39:31

Вы можете выполнить следующую команду.

nohup <your command> & >  <outputfile> 2>&1 &

напр. У меня есть команда nohup внутри скрипта

./Runjob.sh > sparkConcuurent.out 2>&1
Clownfish

14.03.2018 05:42:21

Следующая команда позволит вам запустить что-то в фоновом режиме, не получая nohup.из:

nohup command |tee &

Таким образом, Вы сможете получить вывод консоли во время выполнения сценария на удаленном сервере: enter image description here

Thyag

28.09.2018 11:16:25

Если у вас есть оболочка BASH на вашем mac / linux перед вами, вы можете попробовать следующие шаги, чтобы понять перенаправление практически :

Создайте 2-строчный скрипт под названием zz.sh

#!/bin/bash
echo "Hello. This is a proper command"
junk_errorcommand
  • Выходные данные команды echo поступают в STDOUT filestream (файловый дескриптор 1).
  • Выходные данные команды error поступают в файловый поток STDERR (файловый дескриптор 2)

В настоящее время простое выполнение сценария отправляет на экран как STDOUT, так и STDERR.

./zz.sh

Теперь начните со стандартного перенаправления :

zz.sh > zfile.txt

В приведенном выше примере "echo" (STDOUT) переходит в файл zfile.формат txt. В то время как" ошибка " (STDERR) отображается на экране.

Вышесказанное то же самое, что и :

zz.sh 1> zfile.txt

Теперь вы можете попробовать обратное и перенаправить" error " STDERR в файл. STDOUT из команды "echo" переходит на экран.

zz.sh 2> zfile.txt

Комбинируя вышеперечисленные два, вы получаете:

zz.sh 1> zfile.txt 2>&1

Объяснение:

  • Во-первых, отправьте STDOUT 1 в zfile.формат txt
  • Затем отправьте STDERR 2 самому STDOUT 1 (используя указатель &1).
  • Поэтому и 1, и 2 помещаются в один и тот же файл (zfile.формат txt)

В конце концов, вы можете упаковать все это в команду nohup и запустить ее в фоновом режиме:

nohup zz.sh 1> zfile.txt 2>&1&
Закрыть X