start-stop-daemon(8)을 사용하여 데몬의 stdout 및 stderr을 리디렉션하는 방법은 무엇입니까?

start-stop-daemon(8)을 사용하여 데몬의 stdout 및 stderr을 리디렉션하는 방법은 무엇입니까?

나는 데비안 8 제시를 실행합니다.

데몬이 디버깅 정보를 stdout 및/또는 stderr에 인쇄하도록 하는 데몬의 디버깅 기능을 활성화했습니다. start-stop-daemon(8)에서 호출한 대로 /lib/lsb/init-functions데몬의 stdout 및 stderr을 디버깅 로그 파일로 리디렉션하도록 어떻게 설득할 수 있습니까 /root/log?

그건 비효율적인 것 같습니다 >/root/log 2>&1. start-stop-daemon(8)나는 쉘이 아니기 때문에 이것이 의미가 있다고 생각합니다 . 어쨌든 데몬의 stdout 및 stderr를 어떻게 리디렉션해야 합니까?

[데몬은 이지만 exim4(8), 내가 아는 한 이것은 내 질문과 관련이 없습니다. LSB는 분명히 데몬 관리를 Systemd에 위임합니다. 이것은 내가 아는 모든 것과 간접적으로 관련될 수 있습니다.]

답변1

다양한 계층의 쉘 스크립팅을 통해 마법 옵션을 전달하려는 시도는 시스템 Linux 운영 체제에서 이를 해결하는 완전히 잘못된 방법입니다.

체계화된이미"sysv" 서비스 생성기에 의해 자동 생성된 서비스의 표준 출력/오류를 그대로 기록합니다. "sysv" 서비스 생성기는 귀하를 서비스로 호출하는 exim4.service(아래 어딘가에 )을 만들었습니다./run/systemd/etc/init.d/exim4

대표단은 진행되지 않습니다. 귀하의 rc스크립트는 애초에 서비스를 담당하지 않습니다. 그들은 단지 그것을 위한 편리한 프록시로 실행되고 있을 뿐입니다.

따라서 해야 할 일은 서비스에 대해 이미 캡처된 로그 출력을 살펴보는 것입니다 exim4.service. 이것은 저널에 있거나 syslog저널을 제공하기 위해 배열한 변형에 있을 것입니다.

후자의 경우 syslog변형에 적합한 모든 작업을 수행하십시오. 전자의 경우 systemctl실행할 때마다 서비스에 대한 최근 저널 항목이 표시되는 것을 확인하세요.

systemctl 상태 exim4.service
적절한 권한(수퍼유저 또는 systemd-journal그룹의 구성원)이 있어야 합니다. 다음을 사용하여 마지막 부트스트랩(저널이 아직 순환되지 않은) 이후 서비스에 대한 저널 항목을 볼 수도 있습니다.

Journalctl -u exim4.service -e -b

적절한 서비스 관리하에 출국

아이러니하게도 그 모든 괴물 같은 스크립트는 상당히 짧은 , + 및 + 서비스 및 소켓 유닛 rc으로 대체될 수 있습니다 .exim4-queue.service[email protected]exim4-smtp-relay.socket[email protected]exim4-smtp-submission.socket

또한 exim이 "전경"과 "디버그"/"상세"를 혼동하는 것은 거짓이라는 점에 유의하십시오. 해당 -bdf옵션은 명시적으로 의 비"데몬화" 버전이지만 -bd서비스 관리 도구가 청취 소켓을 처리하는 연결별 "소켓 활성화" 데몬(추가 읽기의 예에 따라)으로 호출하려면 다음과 같습니다. 어쨌든 -bs보다는 사용하십시오 -bdf.

추가 읽기

관련 정보