밀어낼 수 있어표준 출력 / 표준 오류~로부터핑다음과 같이 rsyslog에 명령을 실행합니다.
ping www.superuser.com 2>&1 | logger -p user.info
내 시스템에서는 간단한 tail -f /var/log/messages
. my 의 해당 줄 때문에 거기로 이동합니다 /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 사용)를 콘솔에 인쇄합니다. 출력을 로거에 파이프하지 않으면 이런 식으로 동작합니다. 내가 틀렸다면 정정하십시오. 그러나 이 행동은 다음과 유사합니다.핑명령(적어도 목적지에 도달했을 때).
그렇다면 에서 myprogram의 출력이 표시되지 않는 이유는 무엇입니까 /var/log/messages
? 출력이 어떻게든 버퍼링될 수 있는데 아직 로거에 도달하지 못하고 있습니까? 구성 라인 에 관한 다른 내용이 있을 수 있습니까 rsyslog.conf
?
답변1
myprogram
버퍼링 으로 인한 출력인 것으로 나타났습니다 . 언급된 트릭 사용이 질문에나는 빠른 해결책을 생각해 냈습니다.
script -q -c "myprogram" | logger -p user.info