У меня есть журналы в следующем формате: ГГГГММДД
Я хочу сжать старые журналы (старше текущего дня) и, возможно, впоследствии переместить их в другой каталог.
Могу ли я сделать это в logrotate или мне нужно использовать собственный скрипт в cron?
Вот быстрый скрипт, который будет делать то, что вам нужно:
#!/bin/bash
LOGDIR=/var/log/somedir
OLDLOGS=/var/log/keep-old-logs-here
PATH=/bin:$PATH
TODAY=$(date +'%Y%m%d')
[ -d $OLDLOGS ] || mkdir -p $OLDLOGS
cd $LOGDIR
for LOG in $(ls | egrep '^[[:digit:]]{8}$'); do
[ $LOG -lt $TODAY ] && gzip $LOG && mv $LOG.gz
done
Сделайте скрипт исполняемым:
$ chmod +x /where/you/put/this/script
Запись в crontab будет выглядеть так:
30 0 * * * /where/you/put/this/script
Просто настройте LOGDIR
и OLDLOGDIR
. В 12:30 он переместит все журналы в формате ГГГГММДД за предыдущие (и более ранние, если таковые имеются) дни.
nodateext
,olddir
,compress
иdaily
варианты.logrotate может сделать это с помощью olddir, если имя вашего файла журнала одинаково при каждом запуске, и вы можете добавлять даты. Если имя вашего файла журнала изменится, т.е. YYYYMMDD, то logrotate не сделает этого за вас.
Копирует и gzips /logs/sys.log в /logs/logarchive/sys.20120101.log.gz, сохраняет журналы на одну неделю.
источник
logrotate
Сам не делает этого. Я бы порекомендовал написать дополнительный скрипт и вызвать его,logrotate
используяpostrotate
опцию в конфигурации.источник