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