Nohup поток ошибок перенаправляются на стандартный вывод

Пытаюсь запустить какой-либо процесс в фоновом режиме и переадресовать вывод в файл. Пробовал nohup top > list.txt и т.д., но всегда выводится ошибка:

nohup: ignoring input and redirecting stderr to stdout

Заранее благодарен за помощь.

  • linux
  • ubuntu
  • unix

Legionary's user avatar

Legionary

1,43510 серебряных знаков16 бронзовых знаков

задан 20 сен 2016 в 14:50

Aggravator's user avatar

AggravatorAggravator

2635 серебряных знаков23 бронзовых знака

1 ответ

Надо отвязать top от терминала и перенаправить поток вывода ошибок.

nohup top -bn 1 > list.txt 2>&1

Аргументы:
-b програма не будет привязана к вводу
-n 1 завершится после первого цикла (если это нужно)

ответ дан 20 сен 2016 в 15:06

0xdb's user avatar

0xdb0xdb

51.5k198 золотых знаков59 серебряных знаков237 бронзовых знаков

В Linux команда nohup (HangUP) поддерживает работу процессов даже после выхода из оболочки или терминала.

Примеры использования команды nohup в Linux

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

Содержание

  • Синтаксис
  • Ввод и вывод
  • Использование команды nohup в Linux
    • Проверка версии утилиты
    • Запуск процесса
    • Запуск процесса в фоновом режиме
    • Остановка запущенного процесса
  • Выводы

Синтаксис

nohup КОМАНДА [АРГУМЕНТ]

Ввод и вывод

Если стандартный ввод является терминалом, то он берётся из нечитаемого файла.

Если стандартный вывод является терминалом, то вывод добавляется в nohup.out, при наличии возможности, в противном случае — сюда:

$HOME/nohup.out

Если стандартный поток ошибок является терминалом, то он перенаправляется в стандартный вывод. Запись вывода в ФАЙЛ осуществляется так:

nohup КОМАНДА > ФАЙЛ

Использование команды nohup в Linux

Проверка версии утилиты

Для проверки версии утилиты используется следующий синтаксис:

oleg@mobile:~:$ nohup --v
nohup (GNU coreutils) 9.1
Copyright (C) 2022 Free Software Foundation, Inc.
Лицензия GPLv3+: GNU GPL версии 3 или новее.
Это свободное ПО: вы можете изменять и распространять его.
Нет НИКАКИХ ГАРАНТИЙ в пределах действующего законодательства.

Автор программы — Jim Meyering.
oleg@mobile:~:$

Запуск процесса

Для того чтобы процессы/задания выполнялись в оболочке и не были бы уничтожены при выходе из неё команда выполняется так:

oleg@mobile:~:$ nohup ~/Directory/convert.sh 
nohup: ввод игнорируется, вывод добавляется в 'nohup.out'
oleg@mobile:~:$ 

В скрипт я внёс ошибку. Вывод команды был сохранен в nohup.out:

oleg@mobile:~:$ cat nohup.out 
mkdir: невозможно создать каталог «thumbnails»: Файл существует
convert: unable to open image '*.jpg': Нет такого файла или каталога @ error/blob.c/OpenBlob/3569.
convert: no images defined `thumbnails/*.jpg.png' @ error/convert.c/ConvertImageCommand/3342.
oleg@mobile:~:$ 

Вывод можно также перенаправить в другой файл:

oleg@mobile:~:$  nohup ~/Directory/convert.sh > output.txt
nohup: ввод игнорируется и поток ошибок перенаправляется на стандартный вывод
oleg@mobile:~:$ cat output.txt 
mkdir: невозможно создать каталог «thumbnails»: Файл существует
convert: unable to open image '*.jpg': Нет такого файла или каталога @ error/blob.c/OpenBlob/3569.
convert: no images defined `thumbnails/*.jpg.png' @ error/convert.c/ConvertImageCommand/3342.
oleg@mobile:~:$ 

Можно перенаправить в файл и стандартную ошибку и вывод с использованием атрибута 2>&1:

oleg@mobile:~:$  nohup ~/Directory/convert.sh > output.txt 2>&1
oleg@mobile:~:$ cat output.txt 
nohup: ввод игнорируется
mkdir: невозможно создать каталог «thumbnails»: Файл существует
convert: unable to open image '*.jpg': Нет такого файла или каталога @ error/blob.c/OpenBlob/3569.
convert: no images defined `thumbnails/*.jpg.png' @ error/convert.c/ConvertImageCommand/3342.
oleg@mobile:~:$ 

Запуск процесса в фоновом режим

Для запуска процесса в фоновом режиме в конце команды добавляется символ &. Для примера пингуем linuxcookbook.ru и отправляем его в фоновый режим:

oleg@mobile:~:$ nohup ping linuxcookbook.ru &
[1] 122843
oleg@mobile:~:$ nohup: ввод игнорируется, вывод добавляется в 'nohup.out'

oleg@mobile:~:$ cat nohup.out 
PING linuxcookbook.ru (139.162.132.20) 56(84) bytes of data.
64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=1 ttl=52 time=43.5 ms
64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=2 ttl=52 time=41.2 ms
64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=3 ttl=52 time=37.3 ms
64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=4 ttl=52 time=40.2 ms
64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=5 ttl=52 time=36.5 ms
64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=6 ttl=52 time=39.1 ms
64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=7 ttl=52 time=39.5 ms
64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=8 ttl=52 time=38.7 ms
64 bytes from li1398-20.members.linode.com (139.162.132.20): icmp_seq=9 ttl=52 time=41.1 ms
...
oleg@mobile:~:$

Для проверки работы процесса в фоне применяется команда pgrep с опцией -a:

oleg@mobile:~:$ pgrep -a ping
122843 ping linuxcookbook.ru
oleg@mobile:~:$ 

Остановка запущенного процесса

Для остановки запущенного процесса используется команда kill, за которой следует идентификатор (ID) процесса:

oleg@mobile:~:$ kill 122843
oleg@mobile:~:$ 

Выводы

Из приведённых примеров использования в Linux команды nphup следует:

  • все процессы, запущенные с помощью этой команды, будут игнорировать сигнал SIGHUP даже после выхода из оболочки;
  • как только задание запущено или выполнено, стандартный ввод будет недоступен для пользователя;
  • файл nohup.out используется по умолчанию для stdout и stderr.

I am starting my application in the background using nohup as mentioned below —

root@phx5qa01c:/bezook# nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out &
[1] 30781
root@phx5qa01c:/bezook# nohup: ignoring input and redirecting stderr to stdout

But every time I see this message —

nohup: ignoring input and redirecting stderr to stdout

Will there be any problem if I see this message? What does it mean and how can I avoid it?

Jeff Schaller's user avatar

Jeff Schaller

66.2k35 gold badges114 silver badges250 bronze badges

asked Dec 19, 2013 at 7:59

arsenal's user avatar

3

To make sure that your application is disassociated from its terminal — so that it will not interfere with foreground commands and will continue to run after you logout — nohup ensures that neither stdin nor stdout nor stderr are a terminal-like device. The documentation describes what actions it takes:

If the standard output is a terminal, all output written by the named
utility to its standard output shall be appended to the end of the file
nohup.out in the current directory. If nohup.out cannot be created or
opened for appending, the output shall be appended to the end of the file
nohup.out in the directory specified by the HOME environment variable. If
neither file can be created or opened for appending, utility shall not be
invoked.

If the standard error is a terminal, all output written by the named
utility to its standard error shall be redirected to the same file
descriptor as the standard output.

You redirected stdout to a file when you typed > exhibitor.out in your command line. If you’re OK with having your application’s stderr be directed to the same file as its stdout, you don’t need to do anything else. Or you can redirect stderr to a different file by adding an argument such as 2> exhibitor.err. (Thanks to an unknown user — my notifications didn’t show a name — for suggesting inclusion of this alternative.)

answered Dec 19, 2013 at 10:23

Mark Plotnick's user avatar

Mark PlotnickMark Plotnick

25k2 gold badges60 silver badges82 bronze badges

1

You can get rid off the message if you redirect std error to std output:

nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out 2>&1 &

answered Aug 7, 2015 at 14:39

shargors's user avatar

shargorsshargors

3112 silver badges3 bronze badges

In my situation, I redirect stdout and stderr, but it also displays following in the log file:

nohup: ignoring input

To remove that warning, you have to also redirect stdin as follows:

nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out 2>&1  </dev/null &

I kown this answer is definitely late for you, but maybe it would help others.

Rodrigue's user avatar

answered Aug 9, 2017 at 10:41

styshoo's user avatar

styshoostyshoo

1711 silver badge2 bronze badges

You must log in to answer this question.

Not the answer you’re looking for? Browse other questions tagged

.

Nohup redirects stderr to stdout if it points to a terminal. But I want to retain stderr output to the terminal

Is there a way to accomplish that? Is there an alternative?

asked Jul 1, 2015 at 7:25

IttayD's user avatar

IttayDIttayD

28.3k28 gold badges124 silver badges178 bronze badges

I don’t know if I understood correctly or not.
you mean that you don’t want to see the error in terminal?
if yes:
if you want to save the error in file:

nohup command 2> file.txt 

if you don’t need the errors:

nohup command 2> /dev/null 

2 means the error output of command


2> file.txt means write the error output to the file.txt

answered Jul 1, 2015 at 7:44

Fattaneh Talebi's user avatar

Fattaneh TalebiFattaneh Talebi

7271 gold badge16 silver badges43 bronze badges

2

Just redirect it somewhere else, so it’s not the terminal:

nohup bash -c 'echo OUT ; echo ERR >& 2' 2> err

You can redirect the stderr back to stdout instead of to a file to keep the output in the terminal, but it doesn’t make much sense: nohup is for situations where the terminal might get lost, in which case you’ll lose the stderr.

nohup bash -c 'echo OUT ; echo ERR >& 2' 2> >(cat)

answered Jul 1, 2015 at 7:40

choroba's user avatar

chorobachoroba

232k25 gold badges204 silver badges289 bronze badges

3

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» подошла к завершению.

Понравилась статья? Поделить с друзьями:
  • Nissan расшифровка ошибок airbag
  • Node sass ошибка при установке
  • Nissan погрузчик ошибка f16
  • Node not found ошибка
  • Nissan погрузчик коды ошибок