Nginx运行和控制命令

来源:互联网 发布:记账app 知乎 编辑:程序博客网 时间:2024/06/05 15:45

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重载配置
用新的配置开始新的工作进程
从容关闭旧的工作进程USR1重新打开日志文件USR2平滑升级可执行程序。WINCH从容关闭工作进程

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

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

如何给主进程发送信号呢?首先要知道主进程的进程号PID?

获取PID有两个途径,

一个是,在Nginx启动后,默认在Nginx服务器安装目录下面的logs/nginx.pid文件,里面存储主进程的PID 。

#cat  /usr/local/nginx/logs/nginx.pid

二个是,在Linux下面使用ps命令查看主进程的PID.


列出所有信号名称命令:

kill -l

 

先Nginx服务主进程发送信号也有两种方法:

第一种是使用nginx二进制文件

在nginx  -s 参数后面有  stop,quit,reopen,reload等几个选项可以使用。

另一种方法是使用kill命令发送信号

nginx 启动、停止、重启命令

nginx启动

sudo /usr/local/nginx/nginx     (nginx二进制文件绝对路径,可以根据自己安装路径实际决定)

 

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

kill -QUIT  nginx主进程号     其实是信号SIGQUIT   3

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

kill -TERM nginx主进程号    其实是信号SIGTERM  15

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

kill -9 nginx主进程号             其实是信号SIGKILL   9

 

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

kill -QUIT `cat /usr/local/nginx/nginx.pid`

nginx重启命令

nginx重启可以分成几种类型

1.简单型,先关闭进程,修改你的配置后,重启进程。
kill -QUIT `cat /usr/local/nginx/nginx.pid`    或者直接 TERM和INT
sudo /usr/local/nginx/nginx

2.重新加载配置文件,不重启进程,不会停止处理请求

3.平滑更新nginx二进制,不会停止处理请求

 

平滑重启

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

 

# nginx -t -c /etc/nginx/nginx.conf2006/09/16 13:07:10 [info] 15686#0: the configuration file /etc/nginx/nginx.conf syntax is ok2006/09/16 13:07:10 [info] 15686#0: the configuration file /etc/nginx/nginx.conf was tested successfully如果-q和-t联用,配置文件无错误,将不输出上面的内容。-q  suppress non-error messages during configuration testing 测试配置时只显示错误所以在测试的时候可以 -q -t -c 三个参数一起使用#ps aux | egrep '(PID|nginx)'USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDroot      2213  0.0  0.0   6784  2036 ?        Ss   03:01   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf# kill -HUP 2213

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

 

平滑升级

为了实现Nginx服务器的平滑升级,新的服务器安装路径应该和旧的保持一致,建议在安装新服务器之前先备份旧服务器,

可以在不中断服务的情况下 - 新的请求也不会丢失,使用新的 nginx 可执行程序替换旧的(当升级新版本或添加/删除服务器模块时)。首先,使用新的可执行程序替换旧的(最好做好备份),,依次启动新的主进程和新的工作进程:

在upgrade过程中,还涉及到3个信号(USR2、WINCH和QUIT)。

首先发送USR2信号给原master,原master进程会额外启动一个master进程和若干worker进程,新旧worker进程同时提供对外服务。

第二步发送WINCH信号,原worker进程停止服务并退出。

最后发送QUIT信号给原master使之退出,只保留新的master和worker。

1.备份旧程序,下载新程序

备份原有的/usr/local/nginx下的所有文件,打包压缩到本地目录下

#tar  -czvf   old_nginx.tar.gz  /usr/local/nginx/

首先下载新的Nginx从http://nginx.org/网站,下载解压

还是一套流程,configure,make,make install,其中

#./configure  --prefix=/usr/local/nginx            ##新的服务器安装路径应该和旧的保持一致

# make && make install

2.首先发USR2给旧版本的Nginx主进程号

 #kill -USR2  `cat /usr/local/nginx/logs/nginx.pid`    旧版本的Nginx主进程号

这个时候/usr/local/nginx/logs/nginx.pid无任何变化。

3.然后执行新的可执行程序

#/usr/local/nginx/sbin/nginx

主进程将重命名它的.pid 文件为.oldbin (比如:/usr/local/nginx/logs/nginx.pid.oldbin)

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx33134 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)33135 33126 nobody   0.0  1380 kqread nginx: worker process (nginx)33136 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

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

 

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx33135 33126 nobody   0.0  1380 kqread nginx: worker process is shutting down (nginx)36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

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

 

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

恢复到以前

旧的服务器还尚未关闭它监听的套接字,所以可以恢复旧的服务器:

  • 发送 QUIT 信号给新的主进程,要求其从容关闭其工作进程
  • 发送 TERM 信号给新的主进程,迫使其退出
  • 如果因为某些原因新的工作进程不能退出,向其发送 KILL 信号

新的主进程退出后,旧的主进程会由移除 .oldbin 前缀,恢复为它的 .pid 文件,一切就都恢复到升级之前了。

在发送WINCH信号之前,可以随时停止新的Nginx服务

升级成功

如果升级成功,那必然要关闭旧的服务器进程,发送 QUIT 信号给旧的主进程使其退出而只留下新的服务器运行:

 

      PID  PPID USER    %CPU   VSZ WCHAN  COMMAND    36264     1 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx    36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)    36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)    36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
0 0
原创粉丝点击