Пытаюсь запустить какой-либо процесс в фоновом режиме и переадресовать вывод в файл. Пробовал nohup top > list.txt
и т.д., но всегда выводится ошибка:
nohup: ignoring input and redirecting stderr to stdout
Заранее благодарен за помощь.
- linux
- ubuntu
- unix
Legionary
1,43510 серебряных знаков16 бронзовых знаков
задан 20 сен 2016 в 14:50
AggravatorAggravator
2635 серебряных знаков23 бронзовых знака
1 ответ
Надо отвязать top
от терминала и перенаправить поток вывода ошибок.
nohup top -bn 1 > list.txt 2>&1
Аргументы:
-b
програма не будет привязана к вводу
-n 1
завершится после первого цикла (если это нужно)
ответ дан 20 сен 2016 в 15:06
0xdb0xdb
51.5k198 золотых знаков59 серебряных знаков237 бронзовых знаков
В Linux команда nohup
(HangUP) поддерживает работу процессов даже после выхода из оболочки или терминала.
Команда предотвращает получение процессами или заданиями сигнала 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♦
66.2k35 gold badges114 silver badges250 bronze badges
asked Dec 19, 2013 at 7:59
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 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
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.
answered Aug 9, 2017 at 10:41
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
.
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
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 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
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» подошла к завершению.