У меня есть система, в которой постоянно заканчивается место на диске. Я собираюсь написать сценарий, который очищает каталоги, которые становятся больше. Обычно это каталоги журналов. Учитывая характер машины, мне не нужно вести журналы.
Я хочу написать сценарий, который показывает мне все каталоги, размер которых увеличивается, чтобы я мог убедиться, что этот список идет на 0.
Я думаю примерно так
1. du /
2. wait 24 hrs
3. du /
4. find all instances where the file size increased
Это выглядит достаточно просто, но моя проблема в том, что du работает с файлами и каталогами, вы не можете делать это только с каталогами. Как я могу это преодолеть?
Вы можете использовать find, чтобы узнать, что было изменено за 24 часа,
find / -type d name \* -mtime 1 -print
Следует перечислить все каталоги, которые были изменены за последние 24 часа, но помните, что реально это файлы, которые меняются, а не каталоги.
Другой способ - сделать
du -s * | sort > currentsize
Это летоизируется по каталогам и файлам в исходном местоположении, но затем вы можете хранить его каждый день, переместить этот файл, чтобы сказать oldsize, снова запустить команду
затем
различается текущий размер старый размер
вы можете видеть, что изменилось.
Вы можете использовать awk, чтобы решить, больше он или меньше ..
Все системные журналы тоже имеют тенденцию меняться.
Но исходная находка, о которой я говорил, показывает вам, что файлы были изменены за последние 24 часа. Вы также можете использовать что-нибудь на этом основании.
Если ваша проблема связана с файлами журнала, могу я предложить использовать logrotate
вместо?
Он имеет возможность периодически обнулять файлы журналов, архивировать и / или удалять старые журналы и т. Д. Даже до остановки связанного демона перед выполнением его магии (может потребоваться, если указанный демон держит файл журнала открытым).
Как уже отмечалось, используйте logrotate
для управления ротацией и очисткой файлов журнала. Он может сжимать старые журналы и удалять самые старые журналы после X поколений.
Мой обычный поиск пространства выполняется с помощью обхода самых больших каталогов с помощью команды du -s * | sort -n
. Это позволяет мне быстро находить каталоги и файлы, в которых очистка будет иметь большое значение.
Если вы используете munin
для мониторинга использования диска вы можете настроить его так, чтобы он уведомлял о высоком уровне использования. 80% и 90% - хорошая отправная точка для предупреждений и критических сообщений.
Вы запускаете find на периодической основе, чтобы найти файлы, размер которых превышает некоторый порог. Это не поможет, если у вас много файлов большого размера, но обнаружит, что файлы становятся неоправданно большими.
Предполагая, что вы пытаетесь найти растущий каталог в /
, можешь попробовать:
du -s /*/
Это выведет обобщенные индивидуальные размеры для каждого каталога в / (и только каталогов).
Это не очень эффективно, но вы можете сделать что-то вроде этого:
find / -type d -print0 | xargs -0 du -s