foo
콘솔(예: tty1
)에서 명령을 실행하면 출력이 콘솔로 전송됩니다.
daemon foo started successfully
가상 터미널( )에서 동일한 명령을 실행하면 terminator
터미널에는 출력이 표시되지 않지만 출력은 으로 전송됩니다 syslog
.
왜 이런 일이 발생합니까? 출력이 전송되는 위치를 어떻게 제어합니까?
foo
명령을 실행 하고 출력을 로 보내는 init 시작 스크립트가 있습니다 tty1
. 출력을 syslog로 보내고 싶습니다(마치 콘솔이 아닌 가상 터미널에서 init 스크립트를 시작한 것처럼).
답변1
당신이 할 수 있는 대로데몬에 대한 데비안 매뉴얼 페이지, 이는 init 시스템에서 데몬을 구현하는 방법에 따라 크게 달라집니다.
- SysV 모드(stdin/out/err는 /dev/null에 연결됨)
- 이것"새로운 스타일"방법: (stdout/stderr이 systemd-journald.service로 연결됨)
... 10. 새로운 데몬 프로세스는 syslog() 호출을 사용하여 시스템 syslog 서비스에 직접 기록하지 않도록 선택할 수 있습니다.fprintf()를 통해 표준 오류에 로그인한 다음 init 시스템에 의해 syslog로 전달됩니다....
후자의 경우 xterm에서 나타나는 동작은 정상적인 동작입니다.
fprintf(stdout/stderr)를 통해 데몬이 출력하는 내용은 syslog에 의해 제어됩니다.
따라서 syslog 구성(syslog.conf 파일에서 찾을 수 있음) 및 로그 수준에 따라 데몬 출력이 무시되거나 특정 파일에 추가되거나 시스템 콘솔(tty1) 에코에서 xterm이 발생하지 않습니다.