nohup: ігнорування введення та переадресація stderr на stdout


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 помилка / вихідний файл. але що таке статус після додавання 2>&1?
Рахул Патіль

Відповіді:


20

Щоб переконатися, що ваше додаток відмежоване від його терміналу - щоб він не заважав командам переднього плану і продовжував працювати після виходу з програми - nohupгарантує, що ні stdin, ні stdout, ні stderr не є пристроєм, подібним до терміналу. Документація описує , які дії він приймає:

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

Якщо стандартна помилка є терміналом, весь вихід, записаний названою утилітою до її стандартної помилки, повинен бути перенаправлений на той же дескриптор файлу, що і стандартний вихід.

Ви перенаправляли stdout у файл під час введення > exhibitor.outв командному рядку. Якщо ви все в порядку з тим, що stderr програми буде спрямований на той самий файл, що і його stdout, вам більше нічого не потрібно робити. Або ви можете перенаправити stderr в інший файл, додавши такий аргумент, як 2> exhibitor.err. (Завдяки невідомому користувачеві - у моїх повідомленнях не було вказано імені - за пропозицію включити цю альтернативу.)


2
Це також корисно , щоб закрити вхід Fd вручну наступним чином: </dev/null; Linux зробить це автоматично, але якщо цього не зробити вручну, ви все одно отримаєте рядок у висновку nohup: ignoring input
nohup,

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 &

4

У моїй ситуації я перенаправляю stdout та stderr, але він також відображає наступне у файлі журналу:

nohup: ignoring input

Щоб видалити це попередження, вам також слід перенаправити stdin так:

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 &

Я знаю, що ця відповідь, безумовно, пізно для вас, але, можливо, це допоможе іншим.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.