Linux: как перенаправить stdout & stderr в логгер?

22

У меня есть программа, которую нужно запустить при запуске, она выводит данные на stdout и stderr, которые я хочу перенаправить в системный журнал с помощью команды logger. То, что у меня есть в моем скрипте запуска, это:

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

Это перенаправляет стандартный вывод в syslog, но на консоль приходит stderr, поэтому мне нужно уточнить команду.

Фред Бассет
источник
Пользователь >&: tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
Борис Бурков

Ответы:

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 |.

Ссылки

SLM
источник
2
slm, без обид подразумевается, но последняя форма - безудержное злоупотребление башизмом. Количество вопросов, которые могут быть вызваны такими ненужными сокращениями, совсем не стоит того небольшого выигрыша, который можно получить от их использования. Например, даже на вашем собственном компьютере, если вы поместите вышеупомянутое в сценарий и dashпопытаетесь выполнить сценарий при загрузке только для того, чтобы потерпеть неудачу и затормозить процесс загрузки ... хорошо ... Когда упоминается такой синтаксис, он должен всегда в контексте интерактивных оболочек только , или, по крайней мере, таково мое мнение.
mikeserv
@mikeserv - без обид 8-). Я включил их, так как они в руководстве ABSG. Я предположил (возможно, неправильно), что ОП использовал Bash, поскольку они показали, 2>&1но ваши предупреждения весьма мудры, учитывая, что пример касается стартапов. Я сделаю эти последние советы более заметными с предупреждением, что они предназначены только для интерактивных оболочек Bash.
SLM
@mikeserv - нет, это здравый совет. Как правило, я не использую Dash или даже Ubuntu, поэтому я немного забываю об этих проблемах, но они все еще очень реальны, и хорошо отметить их, поскольку Ubuntu / Debian / Dash, вероятно, будет более распространенным сценарием.
SLM
Честно говоря, я тоже не пользуюсь дебианами, но я все больше и больше осознаю, что многие используют. Я использую dash, хотя - это действительно быстро.
mikeserv
1
Ну, это может и не понадобиться - вы не можете набрать достаточно быстро, чтобы это изменило интерактивную оболочку - для которой я использую zsh. Но для сценариев тире быстрее, чем любые другие, которые я пробовал.
mikeserv