最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何借助Master进程发送特定信号完成Nginx日志的平滑切割与物理归档
时间:2026-06-19 09:10:46 编辑:袖梨 来源:一聚教程网
Nginx日志平滑切割通过Master进程响应USR1信号实现,不中断服务且不丢失日志;核心步骤为重命名旧日志、发送USR1信号触发reopen、验证后归档;推荐用logrotate自动化管理并注意权限、pid路径及执行顺序。
通过 Nginx Master 进程实现日志平滑切割与物理归档,核心是利用 USR1 信号触发日志文件句柄的重新打开,整个过程不中断服务、不丢失请求日志。这不是 Nginx 自身的轮转功能,而是靠外部操作配合 Master 进程的信号响应机制完成的。
理解 USR1 信号的作用
Master 进程收到 SIGUSR1(即 nginx -s reopen 或 kill -USR1 <pid>)后会:
- 从当前配置文件中读取
access_log和error_log的路径定义 - 以 worker 进程用户身份,重新打开这些日志文件(创建新文件或覆盖已存在文件)
- 通知所有 worker 进程关闭旧文件句柄,切换到新打开的文件写入
- 旧日志文件此时已无进程持有句柄,可安全移动、压缩或删除
标准操作流程(手动/脚本化)
按顺序执行以下三步,确保原子性与安全性:
-
备份旧日志:将当前正在写的日志重命名,例如:
mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +%F-%H) -
触发 reopen:向 Master 进程发送 USR1 信号,方式任选其一:
nginx -s reopen,或kill -USR1 $(cat /var/run/nginx.pid),或kill -USR1 $(pgrep -f "nginx: master") -
验证与清理:检查新
access.log是否已生成且有新写入(如 curl 访问后查看文件大小变化),再对归档文件做压缩、同步或上传等后续处理
生产环境推荐:用 logrotate 自动化管理
手动操作适合调试或低频场景;高可用系统应交由 logrotate 托管,它能精准控制周期、保留策略和权限。典型配置(/etc/logrotate.d/nginx)如下:
/var/log/nginx/*.log {-
daily—— 每天凌晨触发 -
missingok—— 日志不存在也不报错 -
rotate 30—— 最多保留 30 份 -
compress—— 压缩旧文件(.gz) -
delaycompress—— 延迟压缩,确保当日日志不被立即压缩 -
create 0644 www-data adm—— 新日志权限与属主 -
sharedscripts—— 所有匹配文件共用一次 postrotate -
postrotateif [ -f /var/run/nginx.pid ]; thenkill -USR1 $(cat /var/run/nginx.pid)fiendscript }
关键注意事项
避免常见失误,保障切割可靠:
- 确保
nginx.pid路径与配置中pid指令一致(默认/var/run/nginx.pid),否则 kill 找不到进程 - 重命名旧日志必须在
reopen之前完成;若先 reopen,Nginx 会继续往原名文件写,导致归档内容不全 - worker 进程用户(如 www-data)需对日志目录有写权限,否则 reopen 后无法创建新文件
- 若使用容器部署,注意
logrotate需运行在宿主机或特权容器中,并能访问 Nginx 进程与 pid 文件
相关文章
- 明末渊虚之羽版本奖励错误如何补偿 07-01
- 原神峡谷盈月之镜解谜方法 07-01
- 末日进化如何升级人物卡 07-01
- 魔兽世界卡格罗什的命运背包位置在哪 07-01
- 沙石镇时光体力恢复方法大全 沙石镇时光快速回满体力的实用技巧 07-01
- 空洞骑士寻神者篇章攻略 07-01