Я использую logrotate
для управления моими журналами. Поскольку мне нужно управлять множеством файлов журналов. Моя конфигурация logrotate выглядит так
/log/typeA*.log
/log/typeB*.log
/log/typeC*.log{
daily
rotate 7
copytruncate
size 1M
compress
su root root
create 0644 root root
missingok
}
После завершения logrotate я вижу кучу нулевых символов в начале файла. Это выглядит так
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
Похоже на бесконечно длинную строку. Также размер файла выглядит так же. Предлагается решение https://serverfault.com/a/510470 использовать скрипт postrotate, например
postrotate
sed -i -e 's/\o00//g' session.timing.1
endscript
Но поскольку я применяю его к куче файлов, у меня нет конкретного имени, например session.timing.1
Есть ли способ сделать это обобщенно? Я хочу, чтобы эта операция была выполнена для всех файлов typeA_date1.log
typeA_date2.log
и так далее.....
Или вы можете предложить какой-либо другой метод, который может быть полезен здесь?
у меня та же проблема. После прочтения кода logrotate
я думаю, что когда программа продолжает писать сообщение журнала с открытым файлом, можно использовать только режим copytruncate
, но этот режим также делает дыру в файле с помощью ftruncate
и заполните NULL
символами.
Несколько советов:
copytruncate
syslog
configure, см. как StandardOutput
в файл, поэтому, возможно, можно использовать logrotate
с режимом create
(не уверен)