nohup: игнорирование ввода и перенаправление stderr на стандартный вывод

19

Я запускаю свое приложение в фоновом режиме, используя nohupкак указано ниже -

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

Но каждый раз, когда я вижу это сообщение -

nohup: ignoring input and redirecting stderr to stdout

Будут ли какие-либо проблемы, если я увижу это сообщение? Что это значит и как я могу избежать этого?

арсенал
источник
2
Вы пробовали:nohup java -jar blaa bla >/tmp/test.out 2>&1 &
Рахул Патил
вместо использования /tmp/test.outя могу использовать exhibitor.out. Извините, что задаю немой вопрос, так как я довольно новичок в этих вещах ..
Арсенал
да .. вы можете использовать .. это просто std error / output file. но что такое статус после добавления 2>&1?
Рахул Патил

Ответы:

20

Чтобы убедиться, что ваше приложение отсоединено от его терминала, чтобы оно не мешало выполнению команд переднего плана и продолжало работать после выхода из системы, убедитесь, nohupчто ни stdin, ни stdout, ни stderr не являются терминальными устройствами. Документация описывает , какие действия он принимает:

Если стандартный вывод является терминалом, все выходные данные, записанные указанной утилитой в ее стандартный вывод, должны быть добавлены в конец файла nohup.out в текущем каталоге. Если nohup.out не может быть создан или открыт для добавления, вывод должен быть добавлен в конец файла nohup.out в каталоге, указанном переменной среды HOME. Если ни один файл не может быть создан или открыт для добавления, утилита не вызывается.

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

Вы перенаправили стандартный вывод в файл при вводе > exhibitor.outв командной строке. Если вы согласны с тем, чтобы stderr вашего приложения направлялся в тот же файл, что и его стандартный вывод, вам больше ничего не нужно делать. Или вы можете перенаправить stderr в другой файл, добавив аргумент, например 2> exhibitor.err. (Спасибо неизвестному пользователю - мои уведомления не показывали имя - за предложение о включении этой альтернативы.)

Марк Плотник
источник
2
Это также полезно , чтобы закрыть вход Fd вручную следующим образом: </dev/null; Linux сделает это автоматически, но если этого не сделать вручную, вы все равно получите строку в выводе nohup, которая гласит:nohup: ignoring input
wulfgarpro
17

Вы можете избавиться от сообщения, если перенаправите ошибку std на вывод std:

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 &
shargors
источник
4

В моей ситуации я перенаправляю stdout и stderr, но в журнале также отображается следующее:

nohup: ignoring input

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

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 &

Я знаю, что этот ответ определенно опоздал для вас, но, возможно, это поможет другим.

styshoo
источник