저는 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
.
추가 읽기
- https://unix.stackexchange.com/a/233581/5132
- 조나단 데보인 폴라드(2014).실행 중인 스크립트와 서비스 단위를 나란히 봅니다.. 자주 주어지는 답변입니다.
- 조나단 데보인 폴라드(2014). ""전경"이 "디버그 모드"를 의미한다고 가정하지 마십시오.'. Unix 데몬을 설계할 때 피해야 할 실수. 자주 주어지는 답변입니다.