nginx信号
#nginx 今天看到关于Nginx日志文件的切割,切割脚本如下:
第一条命令很好理解,将当前的日志文档重命名。 第二条命令的作用是发送kill -USR1信号给Nginx的主进程号,让Nginx重新生成一个新的日志文件。
在这之前不知道kill -USR1的原理,不是很理解。 在linux系统中,linux是通过信号与”正在运行的进程”进行通信的。linux系统中,也很多预定义好的信号,像SIGHUP。USR1是用户自定义信号。可以理解为:进程自己定义接到这个信号该干嘛(也就是进程编写者自己确定收到这个信号干嘛还是什么都不做都行,完全交给开发人员自己决定)。而在nginx中,它自己编写了代码处理当我接到USR1信号的时候,让nginx重新打开日志文件。具体原理如下:
nginx的主进程收到USR1信号,会重新打开日志文件(以nginx配置文件中的日志名称命名,就是配置文件中access_log项所设置的值,如果文件不存在,会自动创建一个新的文件xxx.log)。然后把日志文件的拥有者改为“工作进程(
worker进程)”,目的是让worker进程就具备了对日志文件的读写权限(master和worker通常以不同用户运行,所以需要改变拥有者)。nginx主进程会关闭重名的日志文件(也就是刚才使用mv命令重命名成access_${YESTERDAY}.log的文件),并通知工作进程使用新打开的日志文件(刚才主进程打开的文件access.log)。具体实现上更细化点就是,主进程把USR1信号发给worker,worker接到这个信号后,会重新打开日志文件(也就是配置文件中约定的xxx.log)
所以-USR1是Nginx的一个信号,那么还有哪些信号呢,这些信号有什么作用呢?总结如下: 主进程可以处理以下的信号:
TERM, INT
快速关闭
QUIT
从容关闭
HUP
重载配置,用新的配置开始新的工作进程,从容关闭旧的工作进程
USR1
重新打开日志文件
USR2
平滑升级可执行程序
WINCH
从容关闭工作进程
尽管你不必自己操作工作进程,但是,它们也支持一些信号:
TERM, INT
快速关闭
QUIT
从容关闭
USR1
重新打开日志文件
最后更新于