Linux日志定时轮询流程详解(3)
时间:2018-03-06 19:02 来源:网络整理 作者:墨客科技 点击:次
copytruncate 如果没有这个选项的话,操作方式:是将原log日志文件,移动成类似log.1的旧文件, 然后创建一个新的文件。 如果设置了,操作方式:拷贝原日志文件,并且将其变成大小为0的文件。 区别是如果进程,比如nginx 使用了一个文件写日志,没有copytruncate的话,切割日志时, 把旧日志log->log.1 ,然后创建新日志log。这时候nginx 打开的文件描述符依然时log.1,由没有信号通知nginx 要换日志描述符,所以它会继续向log.1写日志,这样就不符合我们的要求了。 因为我们想切割日志后,nginx 自动会向新的log 文件写日志,而不是旧的log.1文件 解决方法有两个: 1.向上面的nginx 切割日志配置,再postrotate里面写个脚本 postrotate # 在logrotate转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成行 [ -s /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid` endscript这样就是发信号给nginx ,让nginx 关闭旧日志文件描述符,重新打开新的日志文件描述,并写入日志 2.使用copytruncate参数,向上面说的,配置了它以后,操作方式是把log 复制一份 成为log.1,然后清空log的内容,使大小为0,那此时log依然时原来的旧log,对进程(nginx)来说,依然打开的是原来的文件描述符,可以继续往里面写日志,而不用发送信号给nginx (责任编辑:admin) |