Супервизор активирует некоторые дочерние процессы.
Я сконфигурировал каждый из них следующим образом:
[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
, но я вижу, что он НЕ обновляется при получении каждой строки: содержимое журнала, вероятно, кэшируется до тех пор, пока не достигнет некоторого предопределенного размера перед сохранением в файл .
Мне не нужно сохранять стандартный вывод для использования в будущем.
Есть ли возможность настроить Supervisor на непрерывное обновление stdout.log
?
Или, что еще лучше, чтобы не повредить диск в долгосрочной перспективе, есть ли возможность распечатать последние X строк stdout
БЕЗ сохранения их в stdout.log
?
Если вы хотите избежать повреждения диска (, о котором я не видел, чтобы кто-то беспокоился целую вечность ), вы можете создать виртуальный диск, чтобы направить эти файлы журналов таким образом:
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, вы можете подтвердить это, следуя примеру в issue 803 .
Is there a possibility to set Supervisor to continuously update stdout.log?
Я бы сказал нет, так как предполагается, что журналы записываются сразу после их получения, и что в основном это не проблема супервизора, но без запущенной команды невозможно определить, сталкиваетесь ли вы с ошибкой или нет. это нормально по вашей команде.