svlogd가 runit 작업에서 데이터를 더 자주 쓰도록 만드는 방법

svlogd가 runit 작업에서 데이터를 더 자주 쓰도록 만드는 방법

현재 runit 서비스의 일부로 다음 로그/실행 스크립트가 있습니다.

#!/bin/sh
set -e

exec svlogd -tt ./main

" "인 경우 tail -f log/main/current"live"라고 쓰여진 서비스 출력이 표시되지 않습니다. 4K 단위로만 stdout을 덤프하는 것 같습니다. 따라서 서비스 사용량이 적다면 서비스에서 실제로 "sv restart"를 수행하지 않는 한 최신 로그 데이터가 표시되지 않습니다. 이 경우 서비스가 다시 시작되기 전에 모든 데이터가 로그에 기록됩니다.

"-l" 및 "-b" 매개변수를 사용해 보았지만 아무런 효과가 없었습니다(이 시점에서는 이것이 중요한지조차 모르겠습니다).

답변1

안타깝게도 로그 데이터를 작성한 후 표준 출력을 플러시하지 않는 데몬에 결함이 있는 것 같습니다.

svlogd는 라인 버퍼링만 수행하므로 완전한 라인이 표준 입력에 도착하자마자 이를 로그 파일에 출력합니다.

관련 정보