콘솔과 가상 터미널의 프로그램 출력이 다릅니다.

콘솔과 가상 터미널의 프로그램 출력이 다릅니다.

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이 발생하지 않습니다.

관련 정보