감독자의 하위 stdout.log: 실시간으로 읽기

감독자의 하위 stdout.log: 실시간으로 읽기

감독자는 일부 하위 프로세스를 활성화합니다.

나는 다음과 같이 구성합니다.

[program:XXXXX]
command=/XXXXX/XXXXX
directory=/XXXXXX
autostart=true
autorestart=true
startsecs=3
startretries=10000
stdout_logfile=/XXXXXX/stdout.log
stdout_logfile_maxbytes=1MB
stderr_logfile=/XXXXXX/stderr.log
stderr_logfile_maxbytes=1MB

프로세스 중 하나는 테스트 중에 실시간으로 읽고 싶은 많은 화면 출력(초당 5줄)을 생성하는 것입니다.

이제 로그인되었습니다 stdout.log.

stdout.log함께 읽고 싶어요

watch -0.1 tail /XXXXX/stdout.log

그러나 나는 각 행이 수신될 때 업데이트되지 않는다는 것을 발견했습니다. 로그 내용은 미리 정의된 크기에 도달할 때까지 캐시된 다음 파일에 저장될 수 있습니다.

나중에 참조하기 위해 stdout을 유지할 필요가 없습니다.

감독자를 다음으로 설정할 수 있나요?지속적으로 업데이트됨 stdout.log?

아니면 장기적으로 디스크 손상을 방지하기 위해 마지막 X 줄을 stdout저장하지 않고 다시 인쇄할 수 있습니까 stdout.log?

답변1

디스크 손상을 방지하려면(오랜 시간 동안 이에 대해 걱정하는 사람을 본 적이 없습니다.) 램디스크를 만들어 이러한 로그 파일을 다음과 같이 지정할 수 있습니다.

mkdir /var/log/tmplogs
mount -t tmpfs -o size=5m tmpfs /var/log/tmplogs

또는 fstab 형식을 사용하십시오.

tmpfs       /var/log/tmplogs   nodev,nosuid,noexec,nodiratime,size=5M 0 0

그런 다음 해당 /var/log/tmplogs디렉토리를 해당 파일의 대상으로 사용하십시오.

이것은 언급된 로그 버퍼링 문제를 해결하지 못합니다. 그러나 일반적으로 지연은 명령이 출력을 버퍼링하기 때문에 발생하며(tty 유무에 관계없이 다르게 동작할 수 있음) Supervisord가 아닌 Supervisord의 예를 따라 확인할 수 있습니다.문제 803.

stdout.log를 지속적으로 업데이트하도록 Supervisor를 설정할 수 있습니까?

나는 그것이 수신되자마자 이미 로그에 기록되어야 하고 대부분의 경우 감독자 문제가 아니기 때문에 아니오라고 말하고 싶습니다. 그러나 시작 명령 없이는 오류가 발생하는지 또는 오류가 발생하는지 알 수 있는 방법이 없습니다. 당신이 주문하는 것은 정상입니다.

관련 정보