8 ответов:
nohup пишет только в
nohup.outЕсли выход в противном случае к терминалу. Если вы перенаправите вывод команды куда - то еще-в том числе/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 и OS X, это не так, поэтому при работе в фоновом режиме вы можете закрыть его ввод вручную. В то время как закрытие ввода не влияет на создание или нетnohup.out, это позволяет избежать еще одной проблемы: если фоновый процесс пытается прочитать что-либо из стандартного ввода, он остановится, ожидая, пока вы вернете его на передний план и наберете что-то. Таким образом, экстра-безопасная версия выглядит следующим образом:nohup command </dev/null >/dev/null 2>&1 & # completely detached from terminalзаметим, однако, что это не мешает команда от прямого доступа к терминалу, а также не удаляет его из группы процессов вашей оболочки. Если вы хотите сделать последнее, вы можете сделать это, запустив
disownбез аргумента в качестве следующей команды, в этот момент процесс больше не связан с оболочкой "задание" и не будет иметь любой сигналы (не толькоHUP) пересылается на него из оболочки.объяснение:
в системах Unixy, каждый источник входного сигнала или цель выхода имеют a номер, связанный с ним называется "файловый дескриптор", или "fd" для краткости. Каждая запущенная программа ("процесс") имеет свой собственный набор из них, и когда запускается новый процесс, у него уже есть три из них:" стандартный вход", который является fd 0, открыт для чтения процесса, в то время как" стандартный выход "(fd 1) и" стандартная ошибка " (fd 2) открыты для записи. Если вы просто запускаете команду в окне терминала, то по умолчанию все, что вы вводите, переходит на его стандартный вход, в то время как оба его стандарта вывод и стандартная ошибка отправляются в это окно.
но вы можете попросить оболочку изменить, где любой или все эти файловые дескрипторы указывают перед запуском команды; вот что такое перенаправление (
<,<<,>,>>) и трубы (|) операторов.труба является самым простым из них...
command1 | command2аранжирует для стандартного выходаcommand1для подачи непосредственно в стандартный входcommand2. Это очень удобное расположение, что привел к определенному шаблону проектирования в Unix tools (и объясняет существование стандартной ошибки, которая позволяет программе отправлять сообщения пользователю, даже если его вывод идет в следующую программу в конвейере). Но вы можете передавать только стандартный вывод на стандартный вход; вы не можете отправлять любые другие файловые дескрипторы в канал без некоторого жонглирования.операторы перенаправления более дружелюбны в том, что они позволяют указать, какой дескриптор файла для перенаправления. Так что
0<infileсчитывает стандартные входные данные из файла с именемinfile, в то время как2>>logfileдобавляет стандартную ошибку в конец файла с именемlogfile. Если вы не укажете число, то по умолчанию для перенаправления ввода используется значение fd 0 (<это то же самое, что0<), в то время как перенаправление вывода по умолчанию для fd 1 (>это то же самое, что1>).кроме того, вы можете объединить файловых дескрипторов:
2>&1означает "отправить стандартную ошибку там, где стандартный вывод идет". Это означает, что вы получаете один поток вывода, который включает в себя как стандартную ошибку, так и стандартную ошибку, смешанную без возможности их разделения, но это также означает, что вы можете включить стандартную ошибку в трубу.так что последовательность
>/dev/null 2>&1означает "отправить стандартный вывод/dev/null" (это специальное устройство, которое просто выбрасывает все, что вы пишете на него)", а затем отправляет стандартную ошибку туда, где идет стандартный вывод" (который мы просто убедились, что был/dev/null). В принципе, " выбросьте все, что эта команда записывает в любой файловый дескриптор"., когда
nohupобнаруживает, что ни его стандартная ошибка, ни выход не прикреплены к терминалу, он не беспокоится о созданииnohup.out, но предполагает, что вывод уже перенаправлен туда, куда пользователь хочет его отправить.The
/dev/nullустройство работает для ввода, тоже; если вы запустите команду с</dev/null, тогда любая попытка этой команды прочитать из стандартного ввода мгновенно столкнется с концом файла. Обратите внимание, что синтаксис слияния не будет имейте тот же эффект здесь; он работает только для указания файлового дескриптора на другой, открытый в том же направлении (вход или выход). Оболочка позволит вам сделать>/dev/null <&1, но это приводит к созданию процесса с дескриптором входного файла, открытым в выходном потоке, поэтому вместо того, чтобы просто нажимать конец файла, любая попытка чтения вызовет фатальную ошибку "недопустимый дескриптор файла".
вы пробовали перенаправить все три потока ввода-вывода:
nohup ./yourprogram > foo.out 2> foo.err < /dev/null &
Вы можете использовать программы отсоединения. Вы используете его как
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.Примечание у меня нет связи с автором программы. Я только довольный пользователь программы.
sudo bash -c "nohup /opt/viptel/viptel_bin/log.sh $* &> /dev/null" &перенаправление вывода sudo приводит к тому, что sudo перенаправляет пароль, поэтому для этого варианта необходим неудобный механизм.
вы можете сделать ниже nohup & > 2>&1 & например. У меня нет команды hup внутри скрипта ./Runjob.sh > sparkConcuurent.out 2 > &1
если у вас есть оболочка BASH на вашем mac / linux перед вами, вы пробуете следующие шаги, чтобы понять перенаправление практически:
создать 2-строчный скрипт под названием zz.sh
#!/bin/bash echo "Hello. This is a proper command" junk_errorcommand
- выходные данные команды echo поступают в STDOUT filestream (файловый дескриптор 1).
- вывод команды error переходит в stderr filestream (файловый дескриптор 2)
в настоящее время простое выполнение скрипта отправляет как STDOUT, так и STDERR кино.
./zz.shтеперь начните со стандартного перенаправления:
zz.sh > zfile.txtв приведенном выше, " Эхо " (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&

Comments