Linux: 표준 출력 및 표준 오류를 로거로 리디렉션하는 방법은 무엇입니까?

Linux: 표준 출력 및 표준 오류를 로거로 리디렉션하는 방법은 무엇입니까?

부팅 시 실행해야 하는 프로그램이 있고 stdout 및 stderr에 출력이 있으며 logger 명령을 사용하여 시스템 로그로 리디렉션하고 싶습니다. 내 시작 스크립트의 내용은 다음과 같습니다.

/home/dirname/application_name -v|로거2>&1 &

이렇게 하면 stdout이 syslog로 리디렉션되는데, 이는 문제가 없지만 stderr이 콘솔에 표시되므로 명령을 개선해야 합니다.

답변1

에 파이프하기 전에 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

# |&는 2>&1 |의 약어로 Bash 4에 추가되었습니다.

인용하다

답변2

또한 stdout 및 stderr을 syslog의 다른 수준에 기록할 수도 있습니다.

{ ( echo info; >&2 echo critical ) 2>&3 | logger -t mycoolscript; } 3>&1 1>&2 | logger -t mycoolscript -p 2

첫 번째 부분은 ( echo info; >&2 echo critical )stdout 및 stderr에 출력을 인쇄하는 프로그램을 시뮬레이션합니다.

비결은 2>&3이것에서 나온다.답변, stdout 및 stderr을 다른 프로세스로 출력할 수 있습니다.

journalctl -f결과를 관찰하기 위해 systemd와 함께 Linux를 사용할 수 있습니다.

관련 정보