시스템 서비스의 표준 출력 및 오류를 경로에 날짜가 있는 파일에 어떻게 연결할 수 있습니까?

시스템 서비스의 표준 출력 및 오류를 경로에 날짜가 있는 파일에 어떻게 연결할 수 있습니까?

systemd에서 서버 프로세스를 실행하고 다음과 같이 파일 경로에 날짜가 있는 파일에 표준 출력과 오류를 추가하고 싶습니다.

/initech/logs/tps-report-app/sales/2023/09/11/console.log

이상적으로는 날짜가 변경될 때 해당 경로가 자동으로 롤링되기를 바라지만, 그렇지 않더라도 밤새 서버를 다시 시작하므로 세상의 종말은 아닙니다.

내가 하고 싶지 않은 한 가지는 출력이 고정 경로가 있는 파일에 기록된 다음 나중에 날짜가 지정된 경로가 있는 파일로 회전되는 전통적인 로그 회전을 수행하는 것입니다.

그만큼StandardOutput 구성 옵션을 사용하여 파일에 출력을 추가할 수 있지만 append:path해당 문자열에 변수 대체에 대한 언급이 없으므로 수정해야 한다고 가정합니다. 이 경로에 날짜를 포함시킬 수 있는 방법이 있나요?

그렇지 않다면 여기서 가장 좋은 접근 방식은 무엇입니까? 명명된 파이프 또는 일부를 통해 출력을 multilog와 같은 로그 데몬에 연결하시겠습니까? 시스템 '툴킷'에 그런 것이 있나요? 표준 출력과 오류를 리디렉션하는 체인 로더 종류의 스크립트로 서버 프로세스를 래핑하시겠습니까? 다른 것?

답변1

예를 들어 를 사용하여 매일 로그를 롤링할 수 있습니다 logrotate. 사용하는 대신 소프트웨어에 로그를 /path/$(something-bashy here)/console.log로 보내고 경로 생성 StandardOutput의 일부로 해당 서비스를 다시 시작하도록 지시할 수 있습니다 .postrotate

편집: 서버가 밤마다 다시 시작된다는 언급을 방금 확인했습니다. 그렇다면 유일한 관심사는 로그 파일 경로가 존재하는지 확인하는 것입니다. 이 경우 로그 파일 경로 생성을 ExecStart. 같은 것

ExecStart=/bin/bash -ac \
  "mkdir /my/path -p && run_app.sh"

관련 정보