Хотите удалить старые ненужные файлы логов в Linux одной командой? Хотите что бы старые файлы логов удалились автоматически? Я расскажу как это сделать.
Бывалые пользователи Linux сразу подумают, что в этой статье пойдет речь про logrotate, но это не так. Да ротация логов как раз и была придумана и даже демон для нее, что бы старые логи не накапливались, а проходили ротацию и тем самым не засоряли систему. Но не все так радужно и существует куча служб и прочих задач, которые скапливают логи и никак за их количеством не следят. Более того даже если настроить ротацию таким логам, то ничего не выйдет.
Например, демон SoftEther VPN. Он каждые сутки создает новый файл логов, а про старый забывает. Таким образом его папке слогами через год будет 365 файлов только самого демона, а еще 365 файлов логов каждого хаба, который был создан. В общем это много. Может места и не много они будут занимать, но это много для файловой системы, которой нужно вести журнал по каждому файлу, что бы он не потерялся. Да и Linux работает обычно не один год, а лет 10 и сами понимаете что будет с файлами, если их вовремя не почистить.
Для решения задачи удаления старых фалов логов можно воспользоваться утилитой find с вот такими опциями
find /var/log/* -type f -mtime +182 -exec rm {} \;
Где:
- /var/log/* – место для поиска и все папки и подпапки
- -type f – в поиск должны попасть только файлы, папки удалять не стоит, да же если они старые, хотя все опционально
- -mtime +182 – искать файлы будем модифицированные старше 182 дней назад
- -exec rm {} – ну а эта опция удалит все что подпадет под поиск, для теста можно ее удалить и посмотреть что будет удалено
Ок, нашли файлы и удалили. Второй раз это делать не хочется. Нужно автоматизировать. Делаем такой скрипт командой nano rm_old.sh:
#!/bin/sh #Задаем переменные Day=182 log_path="/var/log/" #Найти и удалить файлы find $log_path* -type f -mtime +$Day -exec rm {} \; echo 'файлы журнала старше 30 дней удалены из $log_path'
В переменных указываем нужные значения.
Затем делаем файл исполняемым командой chmod +x rm_old.sh
Добавляем скрипт в cron для периодического запуска командой crontab -e и вписываем следующее
0 10 * * * /path_to_script/rm_old.sh >/dev/null 2>&1
Таким образом скрипт будет запускаться каждые сутки в 00:10
Мне очень сильно помог материал из этих статей: