Ротация логов скриптом

Хотя для ротации логов есть специализированные средства (например, logrotate), зачастую проще оказывается использовать обычные shell скрипты, подобные приведенному ниже.


Пример скрипта для ротации логов nginx:

d=$(date +%Y%m%d_%H%M)

# Копирование логов
cp /tmp/ngx_access.log /tmp/ngx_access_$d.log
cp /tmp/ngx_error.log /tmp/ngx_error_$d.log

# Очистка существующих логов
cat /dev/null > /tmp/ngx_access.log
cat /dev/null > /tmp/ngx_error.log

# Архивация логов
/usr/local/bin/7z a -mx=9 -md=128m -ms=on -t7z -sdel /var/log/archive/logs_$d.7z /tmp/*$d.log

# Контрольное удаление не-архивированных логов (вообще их должно удалить через опцию -sdel)
rm /tmp/*$d.log

# Скрипт выше позволяет не перезапускать nginx, однако, никто не мешает это делать
#service nginx restart