감독자는 일부 하위 프로세스를 활성화합니다.
나는 각각을 다음과 같이 구성했습니다.
[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
?
아니면 장기적으로 디스크 손상을 방지하기 위해 에 stdout
저장하지 않고 마지막 X 줄을 다시 인쇄할 수 있는 가능성이 있습니까 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의 예를 따르면 확인할 수 있습니다.문제 803.
stdout.log를 지속적으로 업데이트하도록 Supervisor를 설정할 수 있습니까?
나는 이미 수신하자마자 로그를 작성하도록 되어 있고 대부분 감독자의 문제는 아니지만 명령을 실행하지 않으면 버그가 발생했는지 또는 정상인지 알 수 있는 방법이 없기 때문에 아니오라고 말하고 싶습니다. 당신의 명령.