Я могу толкатьстандартный вывод / stderrизпингкоманда для rsyslog выглядит так:
ping www.superuser.com 2>&1 | logger -p user.info
В моей системе "живой" вывод можно посмотреть с помощью простого tail -f /var/log/messages
. Он попадает туда из-за соответствующей строки в моем /etc/rsyslog.config
:
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none -/var/log/messages
Однако для моей пользовательской программы это не работает:
myprogram 2>&1 | logger -p user.info
Бинарник myprogram не возвращается/не выходит сразу после вызова - он будет работать некоторое время - и время от времени выводить сообщения (используя printf) на консоль. Он ведет себя так, если я не передаю его вывод в logger. Поправьте меня, если я не прав, но это поведение похоже напингкоманда (по крайней мере, по достижении пункта назначения).
Почему же тогда я не вижу вывода моей программы в /var/log/messages
? Может ли вывод быть каким-то образом буферизован и он просто еще не попадает в logger? Может ли быть что-то еще в rsyslog.conf
строке конфигурации?
решение1
Оказалось, что это был выход из myprogram
буферизации. Используя упомянутые трюкив этом вопросеЯ придумал быстрое решение:
script -q -c "myprogram" | logger -p user.info