Linux: як перенаправити stdout & stderr на реєстратор?


22

У мене є програма, яку мені потрібно запустити при запуску, вона має вихід на stdout та stderr, який я хочу переспрямувати до системного журналу за допомогою команди logger. Що в моєму сценарії запуску - це ти:

/ home / dirname / application_name -v | реєстратор 2> & 1 &

Це перенаправлення stdout в syslog просто добре, але stderr підходить до консолі, тому мені потрібно вдосконалити команду.


Відповіді:


30

Потрібно поєднати вихід STDERR і STDOUT перед тим, як передати його logger. Спробуйте це замість цього:

/home/dirname/application_name -v 2>&1 | logger &

Приклад

$ echo "hi" 2>&1 | logger &
[1] 26818
[1]+  Done                    echo "hi" 2>&1 | logger

$ sudo tail /var/log/messages
Apr 12 17:53:57 greeneggs saml: hi

Тут ви можете також використовувати скорочені позначення, якщо обережно їх використовувати у фактичній оболонці Bash (не плутати з Dash):

$ echo "hi" |& logger &

ПРИМІТКА. Це еквівалентно <cmd1> 2>&1 | <cmd2>. Знову лише використовувати вищезазначене, коли інтерактивно використовувати фактичну оболонку Bash, було б хорошим способом підійти до цього.

витяг з ABSG

# | & було додано до Bash 4 як абревіатура для 2> & 1 |.

Список літератури


2
slm, без образи не мається на увазі, але остання форма - це нестримне зловживання башизмом. Кількість випусків, які можуть викликати такі непотрібні скорочення, зовсім не варті того, що можна було б отримати від їх використання. Наприклад, навіть тільки на власній машині, якщо ви поставите вище в сценарій і dashнамагаєтеся виконати скрипт під час завантаження лише для того, щоб вийти з ладу і підтягнути процес завантаження ... ну ... Коли такий синтаксис згадується, він повинен завжди в контексті інтерактивних оболонок тільки , або, по крайней мере, така моя думка.
mikeserv

@mikeserv - без правопорушень 8-). Я включаю їх, оскільки вони знаходяться в посібнику ABSG. Я припускав (можливо, неправильно), що ОП використовував Bash з тих пір, як вони показали, 2>&1але ваші попередження досить мудрі, враховуючи приклад, що стосується стартапів. Я зроблю ці останні поради більш помітними з попередженням про те, що вони призначені лише для інтерактивних оболонок Баша.
slm

@mikeserv - немає, це слушна порада. Я, як правило, не використовую Dash або навіть Ubuntu, тому я трохи не звертаю уваги на ці проблеми, але вони все ще дуже реальні, і це добре вказати на них, оскільки Ubuntu / Debian / Dash, швидше за все, є більш поширеним сценарієм.
slm

Я не використовую дебіанів, чесно, але я все більше усвідомлюю, що багато хто робить. Я все-таки користуюся dash, хоча - це дійсно швидко.
mikeserv

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