У меня есть приложение, создающее файлы журналов в такой структуре:
maillog/
2012-07-02/
production_environment-2012-07-02__23_51_50-1341265910-some name.log
production_environment-2012-07-02__23_51_52-1341265912-some other name.log
...
2012-07-03/
production_environment-2012-07-03__04_26_47-1341282407-third name.log
production_environment-2012-07-03__04_26_47-1341282407-more names.log
...
2012-07-04/
...
2012-07-05/
...
Я ищу хороший способ ротации этих каталогов журналов.
Если возможно, я хотел бы сжать файлы в каждом каталоге (нет проблем с logrotate)и повернуть датированные каталоги (невозможно с logrotate?).
Я не решаюсь написать что-то подобное самостоятельно, так как уверен, что есть хорошие инструменты для выполнения такой работы.
Есть идеи, как это сделать?
Простой сценарий оболочки, запланированный как crontab, должен работать, учитывая, что в LOG_DIR нет других архивов, которые могут быть непреднамеренно удалены:
#!/bin/bash
DIR_ROTATE_DAYS=7
TARBALL_DELETION_DAYS=60
LOG_DIR=/var/log/<program>/
cd $LOG_DIR
log_line "compressing $LOG_DIR dirs that are $DIR_ROTATE_DAYS days old...";
for DIR in $(find ./ -maxdepth 1 -mindepth 1 -type d -mtime +"$((DIR_ROTATE_DAYS - 1))" | sort); do
echo -n "compressing $LOG_DIR/$DIR ... ";
if tar czf "$DIR.tar.gz" "$DIR"; then
echo "done" && rm -rf "$DIR";
else
echo "failed";
fi
done
echo "removing $LOG_DIR .tar.gz files that are $TARBALL_DELETION_DAYS days old..."
for FILE in $(find ./ -maxdepth 1 -type f -mtime +"$((TARBALL_DELETION_DAYS - 1))" -name "*.tar.gz" | sort); do
echo -n "removing $LOG_DIR/$FILE ... ";
if rm -f "$LOG_DIR/$FILE"; then
echo "done";
else
echo "failed";
fi
done