systemd service로 시작된 프로그램이 있습니다 myprogram.service
. 문제는 로그를 로그 파일에 직접 기록한다는 것입니다 /opt/myprogram/logs.txt
. .journalctl
myprogram.service
특정 파일의 텍스트를 로그로 파이프하도록 Systemd에 지시하도록 수정하는 것이 가능합니까 ?
답변1
tail
먼저 와 을 결합 해 보겠습니다 logger
.
tail -f /opt/myprogram/logs.txt | logger
tail
파일에서 모든 새 줄을 지속적으로 읽고 표준 출력에 복사합니다. 로거는 이러한 행을 시스템 로그로 보냅니다.
편집하다:
파이프가 버퍼링 중이기 때문에 로거는 잠시 동안(4Kb 기본 버퍼가 채워질 때까지) 잠자기 상태일 수 있습니다. 이 문제는 stdbuf
버퍼링을 사용하거나 비활성화하여 해결할 수 있습니다 unbuffer
.
stdbuf -i0 -o0 tail -f /opt/myprogram/logs.txt | logger
답변2
애플리케이션에서 출력 파일 이름을 변경할 수 없는 경우 서비스 단위에서 심볼릭 링크 /opt/myprogram/logs.txt
로 생성을 강제로 생성할 수 있습니까 /dev/stdout
? 출시 전이나 출시 후 단계 또는 두 단계 모두에서 수행 할 수 있습니다.
- 이는 귀하의 필요에 따라 달라질 수도 있습니다
/dev/stderr
.