Удаление файлов журнала с использованием задания 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