Каждый сервер генерирует файлы журналов, которые накапливаются со временем. Если не обращать внимания на эти файлы, то вскоре они могут занять много места в системе и повлиять на ее производительность. Поэтому рекомендуется периодически очищать/удалять файлы журналов. Как правило, разработчики и системные администраторы удаляют/очищают файлы журналов раз в 30 дней или раз в 10 дней, если сервер получает много трафика. Может быть утомительно каждый раз вручную очищать/удалять файлы журналов, поскольку это рутинная задача. Поэтому рекомендуется создать сценарий оболочки для очистки/удаления файлов журнала, чтобы автоматизировать эту задачу. В этой статье мы узнаем, как очищать/удалять файлы журналов в Linux.
Сценарий удаления файлов журнала
Команда find - один из самых популярных инструментов для поиска файлов и папок, возраст которых превышает "x" дней. Мы рассмотрим некоторые часто используемые команды find для поиска старых файлов.
Вместо "-exec rm {} \" еще можно использовать ключ -delete
1 | find /path/to/directory/ -mindepth 1 -mtime +5 -delete |
Удаление файлов старше 1 дня
Вот команда для удаления файлов, которые старше 1 дня.
1 | find /path/to/files* -mtime +1 -exec rm {} \; |
Давайте рассмотрим приведенную выше команду подробнее.
Первый аргумент - это путь к файлам, который может быть файлами, каталогами или даже символами подстановки.
Например, если файлы журнала вашего сервера apache находятся в каталоге /var/log/apache, то вот команда для удаления файлов журнала, которые старше 1 дня.
1 | find /var/log/apache* -mtime +1 -exec rm {} \; |
Далее, -mtime используется для указания количества дней, в течение которых файлы будут удалены. Например, если вы укажете +1, команда find будет искать файлы старше 1 дня.
Третьим аргументом является -exec, который позволяет передать команду для выполнения. Мы используем команду rm, так как хотим удалить файлы. Символ {} \; используется для завершения команды.
Теперь мы рассмотрим некоторые общие случаи использования этой команды.
Удаление файлов старше 7 дней
Ниже приведена команда для удаления файлов старше 7 дней. Замените /path/to/files на путь к файлам журнала или директории.
1 | find /path/to/files* -mtime +7 -exec rm {} \; |
Удаление файлов старше 30 дней или 1 месяца
Вот команда для удаления файлов старше 30 дней. Замените /path/to/files на путь к файлам журнала или директории.
1 | find /path/to/files* -mtime +30 -exec rm {} \; |
Удаление файлов старше 6 месяцев
Вот команда для удаления файлов старше 6 месяцев (182 дня). Замените /path/to/files на путь к файлам журнала или директории.
1 | find /path/to/files* -mtime +182 -exec rm {} \; |
Удаление файлов старше 1 года
Вот команда для удаления файлов старше 1 года (365 дней). Замените /path/to/files на путь к файлам журнала или директории.
1 | find /path/to/files* -mtime +365 -exec rm {} \; |
Если при выполнении любой из команд вы получаете сообщение 'permission denied', используйте ключевое слово sudo перед командами или переключитесь на пользователя, у которого есть разрешение на удаление файлов, а затем попробуйте выполнить вышеуказанные команды.
Сценарий оболочки для очистки/удаления файлов журнала
Теперь давайте поместим приведенную выше команду в сценарий оболочки. Создайте пустой сценарий оболочки в редакторе nano.
1 | nanoi /home/user/delete-log.sh |
Добавьте в него следующие строки.
1 2 3 4 5 6 7 | #!/bin/sh log_path="/var/log/apache" #удалить файлы старше 30 дней find $log_path* -mtime +30 -exec rm {} \; echo 'файлы журнала старше 30 дней удалены из $log_path' |
Сохраните и закройте файл. Вы можете настроить свой сценарий оболочки, изменив упомянутую в нем команду find в соответствии с вашими требованиями. Мы уже упоминали несколько примеров использования команды find для поиска и удаления файлов. Аналогичным образом вы можете изменить расположение файлов журнала в зависимости от конфигурации вашего сервера.
Сделайте его исполняемым
1 | chmod +x /home/user/delete-log.sh |
Теперь вы можете запустить сценарий с помощью следующей команды.
1 | /home/user/delete-log.sh |
Лучше всего настроить задание cron для запуска этого сценария ежедневно/еженедельно. Для этого выполните следующую команду, чтобы открыть файл crontab.
1 | crontab -e |
Добавьте следующую строку, чтобы запускать вышеуказанный сценарий каждый день в 10.00 утра.
1 | 0 10 * * * /home/user/delete-log.sh >/dev/null 2>&1 |
Обязательно укажите полный путь к сценарию оболочки в команде cronjob. Сохраните и закройте файл, чтобы создать cronjob.
Заключение
В этой статье мы узнали, как создать сценарий оболочки для удаления/очистки файлов журнала.