Удаление файлов журнала с использованием задания cron
Привет. Я хочу удалить все файлы журнала за последние 7 дней из папки, но оставить все остальные файлы. Могу ли я использовать команду ниже? Как вы указываете, что он просто удаляет файлы с расширением .log?
find /path/to/file -mtime +7 -exec rm -f {} \;
Нужно ли мне писать эту команду в какой-нибудь файл, или я могу просто написать ее в командной строке и запустить ее каждый день?
Я не знаю, как запустить задание cron в linux.
Ответы
Ответ 1
Используйте подстановочный знак. И просто поместите в свой crontab
параметр crontab -e, чтобы редактировать задания crontab.
См. пример:
* * * * * find /path/to/*.log -mtime +7 -exec rm -f {} \;
Просто чтобы увеличить ответ, проверьте эту приятную статью о том, как работать с вашим crontab
! в Linux.
EDIT: обновить corntab до crontab
Ответ 2
Вы редактируете свой личный crontab, запустив crontab -e
. Это сохраняется в /var/spool/cron/<username>
. Файл будет иметь имя пользователя владельца, поэтому root будет /var/spool/cron/root. Все в файле запускается как владелец файла.
Синтаксис для crontab выглядит следующим образом:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
Когда вы редактируете свой личный crontab, через crontab -e
вы crontab -e
поле имени пользователя, потому что пользователь выводится по имени файла (см. Первый абзац).
При этом ваша запись должна выглядеть так:
* * * * * find /path/to/*.log -mtime +7 -delete
Пожалуйста, не используйте чрезмерно -exec
опцию -exec
, когда опция -delete
делает именно то, что вы хотите. Exec разветвляет оболочку для каждого файла и чрезмерно расточает системные ресурсы.
Когда вы закончите, вы можете использовать crontab -l
чтобы crontab -l
свой личный crontab.
пс. Редактор по умолчанию в большинстве систем Linux - это vi, если вы не знаете vi, используйте что-то простое, например, nano, установив переменную окружения export EDITOR=nano
Ответ 3
find /path/to/dir-containing-files -name '*.log' -mtime +7 -exec rm -f {} \;
Чтобы создать задание cron, поместите в директорию /etc/cron.daily файл, содержащий следующие данные:
#!/bin/sh
find /path/to/dir-containing-files -name '*.log' -mtime +7 -exec rm -f {} \;
Ответ 4
Вы должны использовать crontab -e
, чтобы отредактировать свой crontab и запланировать задание. Это может выглядеть примерно так:
* 1 * * * /usr/bin/find /path/to/file -name '*.log' -mtime +7 -exec rm -f {} \;
Это будет рекурсивно удалять все файлы .log в каталоге/путь/в/файл каждый день в 1 час.
Ответ 5
Так как это о файлах журналов, вы должны посмотреть logrotate
. Он запускается ежедневно из системного задания cron и будет вращать журналы для вас на основе правил из файла /etc/logrotate.conf, который обычно включает каталог /etc/logrotate.d. Поэтому нет необходимости в crontab и не найти.
У вас также может быть собственное задание cron, если у вас нет доступа для добавления файла в /etc/logrotate.d для вашей собственной конфигурации.
В файле /etc/logrotate.d есть много примеров.
Он ожидает, что ваше приложение будет писать в один файл. Это не приложение, которое каждый день регистрируется в разных файлах журнала. Обычно приложение не должно этого делать. Если приложение сохраняет файл журнала открытым, logrotate может запустить postrotate script, чтобы сообщить приложению о возобновлении файла журнала.
Ответ 6
Поискав по этой конкретной теме, я обнаружил, что многие люди рекомендуют использовать опцию -delete следующим образом:
* * * * * find /path/to/*.log -mtime +7 -delete;
Преимущества этой версии в том, что ее легко запомнить, и она будет работать лучше, поскольку -exec будет порождать новый процесс для каждого файла, который нужно удалить.
Вот некоторые ссылки: https://linuxaria.com/howto/linux-shell-how-to-use-the-exec-option-in-find-with-examples
https://unix.stackexchange.com/info/167823/find-exec-rm-vs-delete