Пришлось на днях настроить ротацию логов mongodb.
С logrotate не сложилось, там костыль на костыле и костылём погоняет.

В общем используем встроенную функцию mongodb для ротации логов и немного ей помогаем.

Создаём скриптик, а потом этот скриптик добавляем в крон.
# vim /root/scripts/mongorotate.sh


#!/bin/bash

### log rotate
/usr/bin/kill -USR1 $(cat /var/run/mongodb/mongodb.pid)

### compress newly rotated
for f in /home/logs/mongodb/mongodb.log.????-??-??T??-??-??;
do
gzip "$f"
done

### remove files older than x days
#find /home/logs/mongodb/mongodb.log.????-??-??T??-??-??.gz -ctime +7 -delete

### remove more then X-1 last files
ls -t /home/logs/mongodb/mongodb.log.????-??-??T??-??-??.gz|tail -n+5|xargs -d "\n" -i rm "{}"

 

Обратите внимание что в скрипте можно оставлять архивы логов за несколько дней, а можно оставлять просто несколько последних архивов логов.
Так же обратите внимание на пути к самим логам и к файлу .pid

Разрешим файлу выполняться 
# chmod +x /root/scripts/mongorotate.sh

Добавляем задание в крон
# crontab -e

# Rotate logs mongodb
0 2 * * * /bin/bash /root/scripts/mongorotate.sh > /dev/null 2> /dev/null

Так же заставить mongodb ротировать лог можно выполнив одну из команд:

killall -SIGUSR1 mongod
mongo localhost/admin -eval "db.runCommand({logRotate:1})"

Вот и всё

Комментарии  

Дмитрий
0 #1 Дмитрий 14.09.2016 13:08
Для FreeBSD
xargs -d "\n" -i rm "{}"
нужно заменить на
xargs rm
Цитировать

Добавить комментарий


Защитный код
Обновить