Я столкнулся со странной проблемой при использовании опции журнала сбора мусора JVM с командой Linux logrotate.
Когда вращение выполняется, оно заполняет значения NUL (^ @) первой строкой файла, заданной в качестве аргумента JVM.
Допустим, это Java-вызов (Test.class находится в / home / test /):
java -Xloggc: /home/test/test.log -cp / home / test / Test
Конфигурация logrotate для этого файла следующая:
/ home / test / test.log {
повернуть 56
пропавший
notifempty
copytruncate
не создавать
nomail
}
У меня также есть запись в crontab каждую минуту для тестирования:
* / 1 * * * * / usr / sbin / logrotate -f /etc/logrotate.d/gcLog
Я пришел к выводу, что JVM пишет в режиме добавления и сохраняет какое-то смещение, используемое для записи следующей строки в связанном файле, даже если файл урезан logrotate (я могу ошибаться).
< бр />
Моей следующей идеей было попытаться перенаправить стандартный вывод в файл test.log.
Я использовал этот вызов Java и сохранил ту же конфигурацию для logrotate и cron:
java -verbose: gc -cp / home / test / Test> /home/test/test.log
Еще раз, когда test.log усекается logrotate, новый созданный файл заполняется значениями NUL (^ @) в первой строке.
Нет необходимости говорить, что я не нашел ничего полезного с помощью Google.
Я обнаружил еще один вопрос, связанный со стековым потоком, но мне не удалось настроить Java Script Wrapper, поэтому он не работает.
Кто-нибудь сталкивался с этой проблемой? Есть идеи, почему это происходит? Лучше, обходной путь или решение?
Мне нужно попытаться направить вызов приложения к какому-нибудь скрипту, читающему вывод, и, возможно, посмотреть, как Tomcat регистрирует и поворачивает стандартный вывод в catalina.out (здесь некоторая помощь также будет очень полезна)