리눅스 : stdout & stderr를 로거로 리디렉션하는 방법?


22

시작시 실행 해야하는 프로그램이 있는데, logger 명령을 사용하여 시스템 로그로 리디렉션하려는 stdout 및 stderr에 출력이 있습니다. 시작 스크립트에있는 것은 다음과 같습니다.

/ home / dirname / application_name -v | logger 2> & 1 &

이것은 stdout을 syslog로 리디렉션하지만 stderr이 콘솔에오고 있으므로 명령을 수정해야합니다.


답변:


30

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

실제 배쉬 쉘 (Dash와 혼동하지 말 것)에서주의해서 사용하는 경우 여기에서도 약어 표기법을 사용할 수 있습니다.

$ echo "hi" |& logger &

참고 : 이는에 해당합니다 <cmd1> 2>&1 | <cmd2>. 실제 Bash 쉘을 대화식으로 사용할 때 위의 내용 만 다시 사용하면 접근하는 것이 좋습니다.

ABSG 에서 발췌

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

참고 문헌


2
비방, 공격의 의미는 없지만 후자의 형태는 만연한 강탈이다. 이러한 불필요한 속기의 문제는 그 사용으로 얻을 수있는 적은 이익이 아닙니다. 예를 들어, 자신의 컴퓨터에서도 위 dash의 내용을 스크립트에 넣고 부팅 과정에서 스크립트를 실행하려고 시도하면 부팅 프로세스가 실패하고 부팅 프로세스가 중단됩니다 ... 음 ... 그러한 구문이 언급되면 항상의 맥락에서 수 대화 형에서만 , 또는, 적어도, 그런 내 생각이다.
mikeserv

@ mikeserv-위반 없음 8-). 그것들은 ABSG 가이드에 있기 때문에 포함합니다. OP가 Bash를 사용하고 있었기 때문에 OP가 Bash를 사용하고 있다고 가정 2>&1했지만 (예를 들어 스타트 업을 다루고 있음을 감안할 때) 경고는 현명합니다. 대화식 Bash 셸 전용이라는 경고와 함께 후자의 팁을 더욱 두드러지게 만들겠습니다.
slm

@ mikeserv-아니 그것은 좋은 조언입니다. 나는 일반적으로 Dash 또는 Ubuntu를 사용하지 않으므로 이러한 문제에 대해 조금은 알지 못하지만 여전히 매우 현실적이며 Ubuntu / Debian / Dash가 더 일반적인 시나리오 일 가능성이 있기 때문에 지적하는 것이 좋습니다.
slm

솔직히 데비안을 사용하지는 않지만 많은 사람들이 알고 있다는 사실이 점점 더 인식되고 있습니다. dash그래도 사용합니다 -정말 빠릅니다.
mikeserv

1
글쎄, 그것은 필요하지 않을 수도 있습니다-zsh를 사용하는 대화 형 쉘에서 차이를 만들 정도로 충분히 빨리 입력 할 수는 없습니다. 그러나 스크립트의 경우 대시는 내가 시도한 다른 것보다 빠릅니다.
mikeserv
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.