我找到了一个在 Nginx 中进行日志轮换的示例这里
但可以进行一个简单的测试:
set $date "2018-08-24";
access_log /home/tim/log/access-http-$date.log default;
生成一个名为的日志文件access-http-.log
。我使用的是 nginx 1.13.6 (带有 openresty)。
更新
经过多次修改和调整,我编写了以下 logrotate 脚本来轮换 nginx 生成的不同日志文件。我已将其放入 /etc/logrotate。剩下的问题是日志不会每天轮换(目前我不确定原因),但产生了logrotate -f <filename>
我想要的结果。
有趣的是,nginx -s reload
可以使用 代替 USR1。不幸的是,nginx 日志页面中没有引用它,但我找到了它(如果我没记错的话,是在手册页中)。我手动构建 openresty/nginx 以合并我需要的额外模块,因此我不会获得打包版本中附带的各种额外功能,例如 pid 保存。
/path/to/log/access-http.log /path/to/log/access-https.log /path/to/log/api.log /path/to/log/error.log {
daily
missingok
notifempty
create 664 nobody tim
dateext
dateformat -%Y-%m-%d
dateyesterday
rotate 10
su tim tim
postrotate
/usr/local/bin/openresty -s reload
endscript
}
我认为这对任何拥有大型 nginx 配置来同时提供网页和 API 的人来说都很有用。我将 http 分开,因为我不提供非 https 页面,这样可以防止脚本小子垃圾进入我的页面日志。
答案1
只需设置一个 cron 任务,在午夜前一分钟移动日志文件并用日期重命名,然后向 Nginx 发送 USR1 信号。这将触发它重新打开日志文件并为第二天创建一个新的日志文件。
59 23 * * * mv /var/log/nginx/access.log /var/log/nginx/$(date +%F).access.log && kill -USR1 $(cat /run/nginx.pid)