Да, есть правильный способ: вы вообще не очищаете логи. Вы вращаете их. Вращение включает переключение вывода журнала в новый файл с тем же именем, причем предыдущие N файлов журнала хранятся под набором из N связанных имен файлов.
То, как человек вращает логи, зависит от того, как они пишут их. Это часто упускается из виду. Некоторые из приведенных здесь ответов касаются этого, по крайней мере, упоминая, что некоторые программы ведения журналов сохраняют дескриптор открытого файла для файла журнала, поэтому простое удаление файла не освобождает место и даже не переключает вывод на новый файл журнала.
Если программа, записывающая файл журнала , например, multilog
из daemontools
пакета , то вы ничего не делаете, чтобы вращать журналы вообще - никаких ручных сценариев, никаких cron
заданий. Просто скажите, multilog
что выходные данные журнала находятся в каталоге, и он будет поддерживать автоматически повернутый и ограниченный по размеру набор из N файлов журнала в этом каталоге.
Если программа, записывающая файлы журнала svlogd
из runit
пакета , для другого примера, то же самое применимо. Вы ничего не делаете, кроме указания инструмента на каталог. Он сам будет поддерживать автоматически повернутый и ограниченный по размеру набор из N файлов журнала в этом каталоге.
Если вы используете rsyslog
для записи файлов журнала, то программе регистрации может быть приказано остановиться после того, как файл журнала достигнет определенного размера, и запустить скрипт . Вы должны написать основную часть сценария, чтобы фактически переименовать файл журнала и удалить старые файлы журнала, основываясь на ограничениях общего размера, но, по крайней мере, программа ведения журнала закрыла файл и приостановила запись журнала, пока это происходит.
Старый syslogd
способ ротации журналов, все еще ожидаемый программами журналирования, такими как syslog-ng, и который иллюстрируется инструментами, такими как logrotate
упомянутый djangofan
в другом ответе здесь, несколько более случайен. Один запускает cron
задание, которое периодически переименовывает файлы журнала, и перезапускает демон ведения журнала (с использованием любого супервизора демона, на котором он работает). Проблема с этим, конечно, заключается в том, что он не обеспечивает ограничение общего размера. В медленные недели можно получить N очень маленьких ежедневных файлов журнала, в то время как в загруженные дни можно получить 1 очень большой файл журнала, который значительно превышает ограничение по размеру.
Вот почему более поздние и лучшие инструменты, такие как multilog
и svlogd
имеют параметры конфигурации размера файла, конечно же, сами проверяют размеры файла журнала. Мир узнал, что опрос журналов по расписанию с cron
заданиями или даже с logrotate
демоном оставляет окна для определения неправильного размера, и что это подходящее место для этих проверок, и поэтому строго применяют ограничения, определяемые администратором, чтобы файлы журналов никогда не поглощают раздел, на котором они находятся, в программе, которая на самом деле записывает файлы.