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

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

저는 Debian 8 jessie를 실행하고 있습니다.

데몬의 디버깅 도구를 활성화하여 데몬이 디버깅 정보를 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 statusexim4.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.

추가 읽기

관련 정보