Nginx日志轮转是维护服务器的重要环节,可以有效管理磁盘空间并保留历史日志。以下是设置Nginx日志轮转的几种方法:
创建或编辑logrotate配置文件:
sudo nano /etc/logrotate.d/nginx
添加以下内容(根据需求调整):
/var/log/nginx/*.log {
daily # 每天轮转
missingok
rotate 14 # 保留14天的日志
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
可选轮转周期:
daily
- 每天weekly
- 每周monthly
- 每月size 100M
- 按大小(达到100MB时轮转)测试配置是否正确:
sudo logrotate -d /etc/logrotate.d/nginx
强制立即执行轮转测试:
sudo logrotate -vf /etc/logrotate.d/nginx
创建日志切割脚本 /usr/local/bin/rotate-nginx-logs.sh
:
#!/bin/bash
LOGS_PATH=/var/log/nginx
DATE=$(date -d "yesterday" +"%Y-%m-%d")
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${DATE}.log
mv ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${DATE}.log
kill -USR1 $(cat /var/run/nginx.pid)
添加执行权限:
chmod +x /usr/local/bin/rotate-nginx-logs.sh
设置cron定时任务(每天午夜执行):
sudo crontab -e
添加:
0 0 * * * /usr/local/bin/rotate-nginx-logs.sh
在Nginx配置中使用time
变量实现自动轮转:
http {
access_log /var/log/nginx/access-$year$month$day.log;
}
以上方法中,使用logrotate是最推荐的方式,因为它是Linux系统标准组件,功能完善且易于管理。