부팅 시 실행해야 하는 프로그램이 있고 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를 사용할 수 있습니다.