~에 따르면runsv
매뉴얼 페이지:
service/log 디렉토리가 존재하는 경우, runv는 파이프를 생성하고, service/run 및 service/finish의 표준 출력을 파이프로 리디렉션하고, service/log 디렉토리로 변경하고 ./run 스크립트를 시작합니다. 로깅 서비스의 표준 입력은 파이프에서 읽도록 리디렉션됩니다.
분명히 runsv
서비스의 표준 출력(표준 오류 출력이 아님)만 svlogd 표준 입력으로 리디렉션됩니다. 내 질문은: 왜? 물론 내 장치의 표준 오류 출력을 기록하고 싶습니다. exec 2>&1
각 단위 파일의 시작 부분에 특별히 주의를 기울여야 하는 이유는 무엇입니까?
건배!
답변1
사실, 당신은 모릅니다.
runsv
이 행동은 다음에서 비롯됩니다.svscan
원래 Bernstein daemontools에서도 동일한 작업을 수행했습니다. 거의 모든 사람들이 그것을 복사했습니다. 브루스 건터의svscan
Laurent Bercot의 daemontools-encore에서s6-svscan
s6와 웨인 마샬에서perpd
범인의 사람들은 모두 이런 일을 합니다.
아담 샘슨(Adam Sampson)도 svscan
출신이다.함대err
코드에서 파일 설명자를 호출하더라도 표준 출력만 연결됩니다. ☺
exec 2>&1
과 가 fdmove -c 2 1
표준이 되었으며 일부 프로그래밍 언어가 명확하게 정의되어 있음을 관찰하십시오 .표준 로그파일 설명자 2의 스트림(예: C++)으로 끝내기 위해 다음을 std::clog
수행했습니다.service-manager
nosh 도구 세트에서 두 개의 표준 출력을 연결하십시오.그리고파이프라인 서비스가 함께 있을 때 파이프라인의 표준 오류입니다.
추가 읽기
- 조나단 데보인 폴라드(2014).실행 중인 스크립트와 서비스 단위를 나란히 봅니다.. 자주 주어지는 답변입니다.
- 조나단 데보인 폴라드(2015). "기록".데몬 도구 계열. 자주 주어지는 답변입니다.
- https://unix.stackexchange.com/a/294206/5132