专栏首页呆呆熊的技术路nginx的日志切割小知识

nginx的日志切割小知识

今天读了一篇文章《谈谈nginx信号集》

感兴趣的同学可以查看此链接 http://io.upyun.com/2017/08/19/nginx-signals/

因为知识有限, 其中有段话不是很理解, 最后咨询才了解原来如此, 希望能对大家有些帮助。

以下摘自《谈谈nginx信号集》某一段

nginx的日志切割

master 进程收到 SIGUSR1 后,会重新打开所有已经打开的文件(比如日志),然后向每个 worker 进程发送 SIGUSR1 信息,worker 进程收到信号后,会执行同样的操作。reopen 可用于日志切割,比如 NGINX 官方就提供了一个方案:

$ mv access.log access.log.0
$ kill -USR1 `cat master.nginx.pid` # 重新打开日志文件
$ sleep 1
$ gzip access.log.0    # do something with access.log.0

这里 sleep 1 是必须的,因为在 master 进程向 worker 进程发送 SIGUSR1 消息到 worker 进程真正重新打开 access.log 之间,有一段时间窗口,此时 worker 进程还是向文件 access.log.0 里写入日志的。通过 sleep 1s,保证了 access.log.0 日志信息的完整性(如果没有 sleep 而直接进行压缩,很有可能出现日志丢失的情况)。

看到这段话不懂知识的我眼泪掉下来

具体理解:

问: 我理解的是worker一直会在access.log里面写,为什么又写到新文件名 access.log.0 呢

mv 只是在文件系统层面把 access.log 重命名成了 access.log.0 如果这个时候有进程打开着 access.log,重命名后就会向 access.log.0,本质上 fd 指向的文件是同一个 代码层面,文件的标识符是文件句柄 fd 所以需要让 nginx 重新 close,open 这个 access.log,才会开始写新的文件

所以呢,sleep 1;是很有必要的, 可以尽量避免切换日志文件(实际是切换fd)过程中,日志的丢失

本文分享自微信公众号 - 呆呆熊的技术路(gh_93f28f51010a),作者:近视小猴子

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 策略模式 - go篇

    策略模式是常见的一种模式, 主要用于同类功能不同方式的切换, 而选用不同的模式. 以下是go实现版本

    用户2825413
  • linux性能优化学习笔记(2)-性能排查工具篇

    r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和...

    用户2825413
  • mysql 关于时间类型的刨坑之路

    前两天有做一个基于binglog的数据库实时同步,一张老数据表里有DATETIME、TIMESTAMP不同的时间字段类型,看起来值都是一样的,并且默认值都设置的...

    用户2825413
  • 两种Nginx日志切分方案,狼厂主要在用第1种

    所谓的定时任务切分,是指通过定时任务(比如crontab),发送信号给nginx,让其重新打开文件。该方法也是nginx官网上面比较推荐的,原文说明比较清楚,这...

    后端技术探索
  • 011.ELK使用Kafka做缓存收集Nginx日志

    CoderJed
  • 009.ELK使用Redis做缓存收集Nginx日志

    CoderJed
  • nginx 日志定时切割

    最近有个需求,需要查看我们官网的日活,我是打算通过查看 nginx 日志,对每条日志进行切割,过滤出 ip,然后通过 set 集合去重,查看集合 set 的长度...

    用户4945346
  • Linux下nginx生成日志自动切割的实现方法

    如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    砸漏
  • yii2实战之初见端倪PHP框架大PK安装yii2项目初始化配置服务小结

    章鱼喵
  • 「小程序JAVA实战」 小程序默认加载的页面和生命周期(八)

    IT故事会

扫码关注云+社区

领取腾讯云代金券