运行和控制Nginx

Nginx命令参数

# 当前位置
[root@localhost sbin]# pwd
/usr/local/nginx/nginx-1.4.2/sbin
# 缺省的方式启动 Nginx
./nginx
# 为 Nginx 指定一个配置文件,来代替缺省的
./nginx -c </path/nginx.cnof>
# 不运行,仅测试配置文件
./nginx -t
# 显示 nginx 的版本
./nginx -v
# 显示 nginx 的版本,编译器版本和配置参数
./nginx -V
# 快速停止
./nginx -s stop
# 优雅停机
./nginx -s quit
# 重新加载配置文件
./nginx -s reload
# 重新打开日志文件(备份之前的日志文件,重建新的日志文件)
./nginx -s reopen
重新打开日志文件

在没有执行./nginx -s reopen之前,即便已经对文件执行了mv命令也只是改变了文件的名称,nginx还是会向新命名的旧文件中照常写入日志数据。原因在于linux系统中,内核是根据文件描述符来找文件的。
当nginx接到reopen信号的时候会重新打开日志文件(重新打开的日志就是配置文件中设置的位置和名称),此时日志便会写入到新建的日志文件中。

使用信号系统来控制 Nginx

  • nginx从容停止命令- 等所有请求结束后关闭服务
    kill -QUIT <nginx pid>
    
  • nginx 快速停止命令- 立刻关闭nginx进程
    kill -TERM <nginx pid>
    
  • nginx 强制停止
    kill -9 <nginx pid>
    
    获取进程号pid
    [root@localhost sbin]# ps -ef |grep nginx
    root       1343      1  0 Jun09 ?        00:00:00 nginx: master process ./nginx
    nobody     1344   1343  0 Jun09 ?        00:00:00 nginx: worker process
    

    主进程号:1343;工作进程号:1344

    如果嫌麻烦可以不用查看进程号,直接使用命令进行操作
    kill -QUIT `cat /usr/local/nginx/nginx.pid`
    
    主进程可以处理以下的信号
    信号描述
    TERM, INT快速关闭
    QUIT从容关闭(包括主进程和工作进程)
    HUP重载配置(用新的配置开始新的工作进程 从容关闭旧的工作进程)
    USR1重新打开日志文件
    USR2平滑升级可执行程序
    WINCH从容关闭工作进程
    QUIT快速关闭
    工作进程可以处理以下的信号
    信号描述
    QUIT从容关闭工作进程
    USR1重新打开日志文件

Nginx重启命令

简单型 - 先关闭进程,再启动进程
# 关闭进程
kill -QUIT cat /usr/local/nginx/nginx.pid
# 启动进程
./nginx
重新加载配置文件,不重启进程,不会停止处理请求
# 在重载前,要先测试一下配置文件
./nginx -t -c /usr/local/nginx/nginx.conf
# 重新加载配置文件
kill -HUP cat /usr/local/nginx/nginx.pid

当 nginx 接收到 HUP 信号,它会尝试先解析配置文件(如果指定配置文件,就使用指定的, 否则使用默认的),成功的话,就应用新的配置文件。之后,nginx 运行新的工作进程并从容关闭旧的工作进程。通知工作进程关闭监听 套接字但是继续为当前连接的客户提供服务。所有客户端的服务完成后,旧的工作进程被关 闭。 如果新的配置文件应用失败,nginx 将继续使用旧的配置进行工作。

平滑升级到新的二进制代码

可以在不中断服务的情况下 ,使用新的 nginx 可执行程序替换旧的,一般当升级新版本或需要添加/删除服务器模块时使用

  • 备份可执行程序
    cp -r nginx-1.4.2/ nginx-1.4.2-copy/
    
  • 使用新的可执行程序替换旧的
  • 平滑升级可执行程序
    kill -USR2 cat /usr/local/nginx/nginx.pid
    

    此时主进程将重命名它的 .pid 文件为 .oldbin (比如:/usr/local/nginx/nginx.pid.oldbin),然后执行新的可执行程序,依次启动新的主进程和新的工作进程

    [root@localhost sbin]# ps -ef |grep nginx
    [root@localhost sbin]# ps -ef |grep nginx
    root       1343      1  0 Jun09 ?        00:00:00 nginx: master process ./nginx
    nobody     1344   1343  0 Jun09 ?        00:00:00 nginx: worker process
    root       1441      1  0 Jun09 ?        00:00:00 nginx: master process ./nginx
    nobody     1442   1343  0 Jun09 ?        00:00:00 nginx: worker process
    

    此两个 nginx 实例会同时运行,一起处理输入的请求。要逐步停止旧的实例

  • 从容关闭工作进程
    kill -WINCH <old nginx pid>
    
    [root@localhost sbin]# ps -ef |grep nginx
    root       1343      1  0 Jun09 ?        00:00:00 nginx: master process ./nginx
    nobody     1344   1343  0 Jun09 ?        00:00:00 nginx: worker process is shutting down
    root       1441      1  0 Jun09 ?        00:00:00 nginx: master process ./nginx
    nobody     1442   1343  0 Jun09 ?        00:00:00 nginx: worker process
    
    # 一段时间后,旧的工作进程处理了所有已连接的请求后退出,就仅由新的工作进程来处理输入的请求了
    [root@localhost sbin]# ps -ef |grep nginx
    root       1343      1  0 Jun09 ?        00:00:00 nginx: master process ./nginx
    root       1441      1  0 Jun09 ?        00:00:00 nginx: master process ./nginx
    nobody     1442   1343  0 Jun09 ?        00:00:00 nginx: worker process
    
    此时旧的服务器还尚未关闭它监听的套接字,所以仍可以恢复旧的服务器
  • 恢复旧服务器
    #发送HUP信号给旧的主进程 - 它将在不重载配置文件的情况下启动它的工作进程
    kill -HUP <old nginx pid>
    #发送QUIT信号给新的主进程,要求其从容关闭其工作进程
    kill -QUIT <new nginx pid>
    #发送TERM信号给新的主进程,迫使其退出
    kill -TERM <new nginx pid>
    #如果因为某些原因新的工作进程不能退出,可以强制退出
    kill -9 <new nginx pid>
    
    新的主进程退出后,旧的主进程会由移除 .oldbin 前缀,恢复为它的 .pid 文件,这样,一切 就都恢复到升级之前了
  • 退出旧服务器
    #发送 QUIT 信号给旧的主进程使其退出
    kill -QUIT <old nginx pid>
    
    [root@localhost sbin]# ps -ef |grep nginx
    root       1441      1  0 Jun09 ?        00:00:00 nginx: master process ./nginx
    nobody     1442   1343  0 Jun09 ?        00:00:00 nginx: worker process
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值