nohup: игнорирование входа и перенаправление stderr к stdout

Это - оболочка, которая обеспечивает иллюзию, что символьная ссылка, указывающая на каталог, является реальным каталогом, базированным в местоположении символьной ссылки. cd при необходимости встроенная оболочка, и заполнение клавишей Tab является также функцией, выполненной оболочкой. С тех пор cd выполняется оболочкой, которую это знает о символьной ссылке и может поддержать иллюзию. Большинство команд Unix не реализовано оболочкой и таким образом не имеет никакого способа знать, что Вы пересекли символьную ссылку для достижения текущего каталога. Начиная с этих команд (ls, mv, rm, и т.д.), не может знать о символьной ссылке, они не могут поддержать иллюзию.

19
24.01.2018, 13:53
3 ответа

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

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

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

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

20
27.01.2020, 19:44
  • 1
    Также полезно закрыть вход fd вручную как так: </dev/null; Linux сделает это автоматически, но если не сделанный вручную Вы все еще получите строку в выводе nohup, который читает: nohup: ignoring input –  wulfgarpro 10.05.2017, 04:14

Вы можете избавиться от сообщения, если перенаправите ошибку 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 &
17
27.01.2020, 19:44

В моей ситуации я перенаправляю 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 &

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

6
27.01.2020, 19:44

Теги

Похожие вопросы