运行和控制Nginx

2012年7月20日 发表评论 阅读评论
  1. Nginx命令行选项
  2. 启动、停止、重启nginx命令
  3. 如何重新加载nginx配置文件
  4. nginx程序不重启平滑升级可执行文件

 

nginx命令行参数

不像许多其他软件系统,Nginx 仅有几个命令行参数,完全通过配置文件来配置

-c </path/to/config> 为 Nginx 指定一个配置文件,来代替缺省的。

-t 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。

-v 显示 nginx 的版本。

-V 显示 nginx 的版本,编译器版本和配置参数。

 

nginx控制信号

可以使用信号系统来控制主进程。默认,nginx 将其主进程的 pid 写入到 /usr/local/nginx/nginx.pid 文件中。通过传递参数给 ./configure 或使用 pid 指令,来改变该文件的位置。

主进程可以处理以下的信号:

TERM, INT 快速关闭
QUIT 从容关闭
HUP 重载配置
用新的配置开始新的工作进程
从容关?#31449;?#30340;工作进程
USR1 重新打开日志文件
USR2 平滑升级可执行程序。
WINCH 从容关闭工作进程

尽管你不必自己操作工作进程,但是,它们也支持一些信号:

TERM, INT 快速关闭
QUIT 从容关闭
USR1 重新打开日志文件

 

nginx 启动、停止、重启命令

nginx启动

sudo /usr/local/nginx/nginx ? ? (nginx二进制文件绝?#26376;?#24452;,可以根据自己安装路径实?#31034;?#23450;)

 

nginx从容停止命令,等所有请求结束后关闭服务

ps -ef |grep nginx

kill -QUIT ?nginx主进程号

 

nginx 快速停止命令,立刻关闭nginx进程

ps -ef |grep nginx

kill -TERM nginx主进程号?

如果以上命令不管用,可以强制停止

kill -9 nginx主进程号

 

如果嫌麻烦可以不用查看进程号,直接使用命令进行操作
其中/usr/local/nginx/nginx.pid 为nginx.conf中pid命令设置的参数,用来存放nginx主进程号的文件
kill -信号类型(HUP|TERM|QUIT) cat /usr/local/nginx/nginx.pid
例如

nginx重启命令

nginx重启可以分成几种类型

1.简单?#20572;?#20808;关闭进程,修改你的配置后,重启进程。
kill -QUIT cat /usr/local/nginx/nginx.pid
sudo /usr/local/nginx/nginx
2.重新加载配置文件,不重启进程,不会停止处理请求
3.平滑更新nginx二进制,不会停止处理请求

 

使用信号加载新的配置

Nginx 支持几个信号,能在它运行时控制其操作。其中最普通的是 15 ,用来中止运行的进程:

而最有趣的是能平滑改变 nginx 配置的选项(请注意,在重载前,要先测试一下配置文件):

 

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

 

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

你可以在不中断服务的情况下 - 新的请求也不会丢失,使用新的 nginx 可执行程序替换旧的(当升级新版本或添加/删除服务器模块时)。

首先,使用新的可执行程序替换旧的(最好做好备份),然后,发送 USR2 (kill -USR2 pid)信号给主进程。主进程将重命名它的 .pid 文件为 .oldbin (比如:/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新的可执行程序,?#26469;?#21551;动新的主进程和新的工作进程:

 

在这时,两个 nginx 实例会同时运行,一起处理输入的请求。要逐步停止旧的实例,你必须发送 WINCH 信号给旧的主进程,然后,它的工作进程就将开始从容关闭:

 

一段时间后,旧的工作进程处理了所有已连接的请求后退出,就仅由新的工作进程来处理输入的请求了:

 

这时,因为旧的服务器还尚未关闭它监听的套接字,所以,通过下面的几步,你仍可以?#25351;?#26087;的服务器:

  • 发送 HUP 信号给旧的主进程 - 它将在不重载配置文件的情况下启动它的工作进程
  • 发送 QUIT 信号给新的主进程,要求其从容关闭其工作进程
  • 发送 TERM 信号给新的主进程,迫使其退出
  • 如果因为某些原因新的工作进程不能退出,向其发送 KILL 信号

新的主进程退出后,旧的主进程会由移除 .oldbin 前缀,?#25351;?#20026;它的 .pid 文件,这样,一切就都?#25351;?#21040;升级之前了。

如果尝试升级成功,而你也希望保留新的服务器时,发送 QUIT 信号给旧的主进程使其退出而只留下新的服务器运行:

 

? ? ? ?

扫码联系我

加微信向我提问

  1. 2019年7月6日01:27 | #1

    I like the valuable information you supply to your articles.
    I will bookmark your blog and check once more here regularly.
    I'm somewhat certain I'll be told plenty of new stuff right right
    here! Best of luck for the following!

  2. 2019年7月4日03:23 | #2

    Oh my goodness! Incredible article dude! Thank you so much, However I am going through problems with your RSS.
    I don't know the reason why I am unable to join it. Is there anybody having similar RSS issues?
    Anyone who knows the answer will you kindly respond?
    Thanks!!

  3. 22
    2019年4月19日09:41 | #3

    @大木爻手
    你那是将运行文件添加到/usr/sbin和/usr/bin,全局使用。

  4. ye
    2019年1月8日11:02 | #4

    不错!-!,以前学习的时候有提到过,不过很模糊,现在有个更清晰的认识

  5. icey
    2018年12月21日17:38 | #5

    @test
    因为不满足一个软件的简单使用方法,想要了解更多的运行原理等

  6. test
    2018年11月30日15:38 | #6

    @kkt
    所以是为什么呢

  7. kkt
    2018年11月23日17:20 | #7

    @大木爻手
    因为你不知道,不了解,才会问出这样的疑问吧?

  8. 大木爻手
    2018年10月17日10:47 | #8

    启动不是直接 nginx
    退出不是 nginx -s stop
    为什么文章要写的这么麻烦,杀线程?

  9. 2018年2月1日18:03 | #9

    学习了。不错。

  10. 2017年10月24日15:44 | #10

    abc :
    这个不错

  11. 2017年5月31日10:04 | #11

    不错,顶一个!!!!

  12. 2016年9月12日17:18 | #12

    有用!!!

  13. 2015年6月24日12:01 | #13

    ngnix :sudo service nginx configtest
    [FAIL] Testing nginx configuration: failed !

  14. ternus
    2015年6月13日20:02 | #14

    学习了,平滑升级这点命令有点少啊。

  15. abc
    2015年4月1日21:16 | #15

    这个不错

  16. 2015年2月9日15:02 | #16

    嗯 这一条很好,很重要

  17. Echo
    2014年1月13日22:33 | #17

    Nice~!

  18. pinefantasy
    2013年11月27日18:58 | #18

    通过传递参数给 ./configure 或使用 pid 指令,来改变该文件的位置。---这个没看懂,记住pid做什么呢

    • mood
      2013年11月27日21:32 | #19

      重启或者关闭的时候会读pid

    • 2014年4月15日07:36 | #20

      方便信号控制进程,不用?#30475;?#37117;ps -ef |grep nginx来查看nginx的pid

  19. dayphosphor
    2013年10月15日17:39 | #21

    超不错~~

  20. jay61439476
    2012年12月24日10:09 | #22

    不错 这对实际生产很有帮助

极速快乐十分助手
北京快三最快开奖直播 广西十一选五出奖号码结果 围棋视频 胜负彩17046投注 福彩3D质合遗漏 内蒙古11选5走势图今天 新疆11选5走势图一定牛 足彩赔率奖金 体彩6+1几点开奖 a8娱乐城网上博彩 吉林11选5中奖金额 上海时时乐号码分析 浙江十一选五奖金设置 陕西快乐十分最大遗漏数据 山东十一选五一定牛走势图