dimaseo Dimaseo

Ротация логов nginx при превышении размера Ubuntu 24

🔎 Drupal 7
23 янв в 22:07
# Создаем файл
sudo nano /etc/logrotate.d/site
# С содержимым
/var/www/html/site.ru/logs/*.log {
	size 1M
	missingok
	rotate 999999
	compress
	notifempty
 
	create 0640 www-data adm
	sharedscripts
 
	# Включаем расширение даты в имени файла
	dateext
	dateformat -%Y-%m-%d_%H-%M-%S
 
	postrotate
		# Определяем переменные даты для создания пути
		YEAR=$(date +%Y)
		MONTH=$(date +%m)
		ARCHIVE_DIR="/var/www/html/site.ru/logs/archive/$YEAR/$MONTH"
 
		# Создаем директорию, если её нет
		mkdir -p $ARCHIVE_DIR
 
		# Перезапускаем nginx, чтобы он начал писать в новые файлы
		if [ -f /var/run/nginx.pid ]; then
			kill -USR1 `cat /var/run/nginx.pid`
		fi
 
		# Перемещаем ротированные файлы (с датой в имени) в архивную папку
		# Исключаем текущие .log файлы и уже сжатые архивы, если нужно
		find /var/www/html/site.ru/logs/ -maxdepth 1 -name "*.log-*" -exec mv {} $ARCHIVE_DIR/ \;
	endscript
}
 
# Перенастраиваем таймер на ежечасную ротацию
sudo systemctl edit logrotate.timer
# Вставляем туда
[Timer]
OnCalendar=
OnCalendar=hourly
AccuracySec=1m
 
# перезагружаем 
sudo systemctl daemon-reload
sudo systemctl restart logrotate.timer
 
# проверяем таймер
systemctl list-timers logrotate.timer
 
# тестируем ротацию 
sudo logrotate -d /etc/logrotate.d/site