Я могу отправить команду stdout / stderr из команды ping в 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) на консоль. Он ведет себя так, если я не передаю его вывод в логгер. Поправьте меня, если я ошибаюсь, но это поведение похоже на команду ping (по крайней мере, когда достигается пункт назначения).
Почему тогда я не вижу вывод myprogram в /var/log/messages
? Может ли вывод быть буферизован как-то, и он просто еще не попадает в логгер? Может быть, что-то еще в строке конфигурации rsyslog.conf
?