`
85977328
  • 浏览: 1903487 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

nginx系列(二十三)kill -USER1原理

 
阅读更多
在没有执行kill -USR1 `cat ${pid_path}`之前,即便已经对文件执行了mv命令而改变了文件名称,nginx还是会向新命名的文件” xxx.log_ 20130909”照常写入日志数据的。原因在于:linux系统中,内核是根据文件描述符来找文件的。

一 对linux文件描述符的理解
文件描述符是linux内核为每个打开的文件命名的一个整数标识。

linux内核为每一个进程生成(或者说维护)一个”文件描述符表”,这个文件描述符表记录的是“此进程所打开的文件(进行标识)”。

在这里的环境中,nginx就是一个运行中的进程,这个进程早就打开了一个日志文件,在文件描述符表是记录了文件的。

即便日志文件的路径改变了,但是还是能够找到(根据文件描述符表可以定位)。

二 cat nginx.pid含义
当执行命令“kill -USR1 `cat ${pid_path}`”的时候,nginx.pid文件中保存的其实就是一个数字(自己可以打开看一下,我这里是894),nginx 将其主进程的 pid (进程号)写入到了nginx.pid 文件中,所以可以通过cat命令直接拿到其主进程号,直接操作指定的进程号。

kill  -USR1 `cat ${pid_path}` 就等同于

kill –USR1 894  #指定发信号(USR1)信号给这个进程编号。

三 kill -USR1 `cat ${pid_path}
在linux系统中,linux是通过信号与”正在运行的进程”进行通信的。linux系统中,也很多预定义好的信号,像SIGHUP。USR1是用户自定义信号。可以理解为:进程自己定义接到这个信号该干嘛(也就是进程编写者自己确定收到这个信号干嘛还是什么都不做都行,完全交给开发人员自己决定)。而在nginx中,它自己编写了代码处理当我接到USR1信号的时候,让nginx重新打开日志文件。具体原理如下:

1、nginx 的主进程收到USR1信号,会重新打开日志文件(以nginx配置文件中的日志名称命名,就是配置文件中access_log项所设置的值,如果文件不存在,会自动创建一个新的文件xxx.log)。

2、然后把日志文件的拥有者改为“工作进程(worker进程)”,目的是让worker进程就具备了对日志文件的读写权限(master和worker通常以不同用户运行,所以需要改变拥有者)。

3、nginx主进程会关闭重名的日志文件(也就是刚才使用mv命令重命名成xxx.log_ 20130909.log的文件),并通知工作进程使用新打开的日志文件(刚才主进程打开的文件xxx.log)。具体实现上更细化点就是,主进程把USR1信号发给worker,worker接到这个信号后,会重新打开日志文件(也就是配置文件中约定的xxx.log)
1
0
分享到:
评论

相关推荐

    nginx linux版本安装源码nginx-1.21.6.tar

    1. **获取源码**:在这个案例中,源码文件是`nginx-1.21.6.tar`,它是一个tar归档文件,我们需要先下载并解压。在终端中,可以使用以下命令: ```bash wget http://nginx.org/download/nginx-1.21.6.tar.gz # ...

    centos8 nginx1.20.1 与nginx配置文件

    User=nginx Group=nginx ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/bin/kill -s HUP $MAINPID PIDFile=/var/run/nginx.pid Type=forking [Install] WantedBy=multi-user.target ``` 保存并关闭文件,...

    linux-nginx安装包

    二、下载Nginx源码包 题目提供的压缩包文件"linux-nginx安装包"包含了Nginx的安装源码。首先,解压这个文件: ```bash tar -zxvf linux-nginx安装包 ``` 解压后,你会看到一个名为`nginx-<version>`的目录,这是...

    centos安装Nginx详细配置

    #### 二、下载与解压Nginx - **下载命令**: ```bash wget http://nginx.org/download/nginx-1.16.1.tar.gz ``` - **清理临时文件**: ```bash rm -f /var/run/yum.pid ``` - **解压文件**: ```bash tar -...

    重启或杀掉Nginx进程后丢失nginx.pid的解决办法

    Restarting nginx daemon: nginxcat: /usr/local/nginx/logs/nginx.pid: No such file or directorykill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec … or kill -l [sigspec]nginx not ...

    nginx-1.0.1.tar.gz

    **Nginx 1.0.1 安装与配置详解** `nginx-1.0.1.tar.gz` 是一个针对 CentOS 7 操作系统的 Nginx 服务器的安装包。Nginx 是一款高性能、轻量级的 Web 服务器和反向代理服务器,广泛应用于静态内容服务和负载均衡配置...

    nginx-1.18.0.rar

    add_header Access-Control-Allow-Headers 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; if ($request_method = 'OPTIONS') { return 204; } ...

    nginx源码安装方法

    ### Nginx源码安装详解 #### 一、前言 Nginx是一款高性能的HTTP服务器及反向代理...这种方式不仅能够帮助我们更好地理解Nginx的工作原理,还能够让我们根据实际需求灵活定制Nginx的配置。希望本文对大家有所帮助!

    nginx 升级为最新版 1.12.0

    **Nginx升级至最新版本1.12.0的详细步骤** 在IT行业中,保持软件的更新至关重要,特别是对于像Nginx这样的关键服务器组件。Nginx 1.12.0是一个重要的更新,它可能包含了性能优化、安全修复和新特性。下面将详细介绍...

    nginx使用配置.pdf

    ### Nginx 使用配置详解 #### 一、Linux下的配置使用 **1. 部署环境** 在 Linux 下配置 Nginx 的环境通常需要以下准备: - **操作系统**: CentOS 7 - **预安装软件**: - gcc - pcre - zlib - openssl 这些...

    nginx-1.9.9.tar.zip

    **二、下载Nginx源码** 从[Nginx官方网站](http://nginx.org/)获取1.9.9版本的源码包,或者直接解压已提供的`nginx-1.9.9.tar.gz`。使用如下命令: ```bash wget http://nginx.org/download/nginx-1.9.9.tar.gz tar...

    ansible实现nginx源码的自动化安装

    这里 `web_servers` 是一个组名,`server1` 和 `server2` 是要安装Nginx的服务器的别名和它们的IP地址。 接下来,我们需要创建一个Ansible playbook,用于定义执行的步骤。在工作目录下创建一个名为`install_nginx....

    nginx-1.0.6.tar.gz

    **Nginx 1.0.6 在 Linux 环境下的安装教程** Nginx 是一款高性能的 Web 服务器及反向代理服务器,因其高效、稳定和易扩展的特性,被广泛应用于互联网服务中。这里我们将详细介绍如何在 Linux 系统上安装 Nginx 的 ...

    Centos7安装Nginx或OpenResty1

    二、下载与编译 Nginx 1. 访问 Nginx 的官方下载页面(https://nginx.org/en/download.html)选择合适的版本,然后使用 `wget` 下载源代码压缩包。 2. 解压缩下载的文件: ```bash tar -xf nginx-1.18.xx.tar.gz ```...

    Linux Nginx1.14.0安装以及配置.doc

    在本教程中,我们将深入探讨如何在Linux CentOS 7系统上安装Nginx 1.14.0,以及在安装过程中可能遇到的问题。Nginx是一个强大的Web服务器,广泛用于提供静态内容、反向代理和负载均衡。以下是详细的安装步骤。 首先...

    使用slb后nginx、apache获取真实ip.docx

    6. 重启 Nginx:`kill -USR2 `cat /alidata/server/nginx/logs/nginx.pid`` && kill -QUIT `cat /alidata/server/nginx/logs/nginx.pid.oldbin`` 接下来,我们需要修改 Nginx 的配置文件 `nginx.conf`。添加以下...

    nginx1.21.4Linux版本

    总之,Nginx 1.21.4 Linux版本的使用涉及从安装到配置的一系列步骤,通过熟练掌握这些知识,你可以更好地管理和维护基于Nginx的Web服务,提供高效、安全的网络环境。在实际操作中,应根据具体的业务需求调整Nginx...

Global site tag (gtag.js) - Google Analytics