Nginx —— nginx的命令行控制(nginx的启动与停止、重载配置文件、回滚日志文件、平滑升级等操作)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_42167759/article/details/84999456

在linux中,需要使用命令来控制Nginx服务器的启动与停止、重载配置文件、回滚日志文件、平滑升级等行为。

默认情况下,nginx被安装在目录/usr/local/nginx中,其二进制文件路径为/usr/local/nginx/sbin/nginx,配置文件路径为/usr/local/nginx/conf/nginx.conf 。更多的配置configure的命令参数,详情见Nginx —— configure的命令参数(nginx编译选项)

当然,在configure执行时是可以指定把他们安装在不同目录的。为了简单起见,此次说明默认安装情况下的命令行的使用情况,如果读者目录发生了变化,哪么就替换一下即可。

[root@localhost logs]# /usr/local/nginx/sbin/nginx -?
nginx version: nginx/1.15.6
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]

Options:
  -?,-h         : this help
  -v            : show version and exit
  -V            : show version and configure options then exit
  -t            : test configuration and exit
  -T            : test configuration, dump it and exit
  -q            : suppress non-error messages during configuration testing
  -s signal     : send signal to a master process: stop, quit, reopen, reload
  -p prefix     : set prefix path (default: /usr/local/nginx/)
  -c filename   : set configuration file (default: conf/nginx.conf)
  -g directives : set global directives out of configuration file

-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     重新打开日志文件

扫描二维码关注公众号,回复: 4837660 查看本文章

Nginx的命令行控制

1、默认方式启动

 直接执行Nginx 二进制程序,例如:

[root@localhost logs]# /usr/local/nginx/sbin/nginx

这时,会读取默认路径下的配置文件:/usr/local/nginx/conf/nginx.conf 。

实际上,没有显式指定nginx.conf配置文件路径时,将打开在configure命令执行时使用--conf-path=PATH 指定的nginx.conf文件。

2、另行指定配置文件的启动方式

 使用-c参数指定配置文件。例如:

[root@localhost logs]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

这时会读取-c参数后指定的nginx.conf配置文件来启动nginx。

3、另行指定安装目录的启动方式

使用-p参数指定nginx的安装目录。例如:

[root@localhost logs]# /usr/local/nginx/sbin/nginx -p /usr/local/nginx/

4、另行指定全局配置项的启动方式

 可以通过-g参数临时指定一些全局配置项,以使新的配置项生效。例如:

[root@localhost logs]# /usr/local/nginx/sbin/nginx -g "pid /var/nginx/test.pid;"

上面这行命令意味着会吧pid文件写到/var/nginx/test.pid中。 当然 /var/nginx这个目录是必须存在的。

-g参数的约束条件是指定的配置项不能与默认路径下的nginx.conf中的配置项相冲突,否则无法启动。就像上例那样,类似这台的配置项: pid logs/nginx.pid,是不能存在与默认的nginx.conf中的。

另一个约束条件是,以-g方式启动的Nginx 服务执行其他的命令时,需要把-g参数也带上,否则可能出现配置项不匹配的情形。例如,如果要停止Nginx 服务,哪么需要执行下面代码:

[root@localhost logs]# /usr/local/nginx/sbin/nginx -g "pid /var/test.pid;" -s stop

如果不带上-g "pid /var/nginx/test.pid;" , 哪么就找不到pid文件,也会出现无法停止服务的情况。

5、测试配置信息是否有误

 在不启动Nginx 的情况下,使用-t参数 仅测试配置文件是否有误。例如:

[root@localhost logs]# /usr/local/nginx/sbin/nginx -t

执行结果中显示配置是否正确。

6、在测试配置阶段不输出信息

 测试配置选项时,使用-q参数可以不把error级别以下的信息输出到屏幕。例如:

[root@localhost logs]# /usr/local/nginx/sbin/nginx -t -q

7、显示版本信息

使用-v 参数显示Nginx的版本信息,例如:

[root@localhost logs]# /usr/local/nginx/sbin/nginx   -v

8、显示编译阶段的参数

 使用-V不仅可以显示版本信息以为,还可以显示配置编译阶段的信息,如GCC编译器的版本、操作系统的版本、执行configure时的参数等。如:

[root@localhost logs]# /usr/local/nginx/sbin/nginx   -V

获取PID有两个途径,

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

[root@localhost logs]# cat /usr/local/nginx/logs/nginx.pid
90422

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

[root@localhost logs]# ps -aux | grep nginx

root      90422  0.0  0.0  20608   616 ?        Ss   14:01   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    90423  0.0  0.0  23144  1392 ?        S    14:01   0:00 nginx: worker process
root      90426  0.0  0.0 112720   984 pts/1    S+   14:01   0:00 grep --color=auto nginx

9、快速的停止服务

 使用-s stop可以强制停止nginx服务。-s参数其实是告诉nginx程序向正在运行的Nginx服务发送信号量,Nginx程序通过nginx.pid文件中得到mater进程的进程ID,再向运行中master进程发送TERM信号来快速地关闭Nginx服务。例如:

[root@localhost logs]# /usr/local/nginx/sbin/nginx -s stop

实际上,如果通过kill命令直接向nginx master进程发送TERM和INT信号,效果是一样的。例如:先通过ps命令查看nginx master的进程ID:

[root@localhost logs]# ps -aux | grep nginx
root      90803  0.0  0.0  20608   620 ?        Ss   14:39   0:00 nginx: master process /usr/local/nginx/sbin/nginx

[root@localhost logs]# kill -s SIGTERM 90803 

或者是

[root@localhost logs]# kill -s SIGINT  90803 

这两条命令的效果与执行 与-s stop是完全一样的。

10、“优雅”的停止服务

 如果希望Nginx服务可以正常的处理完当前所有请求再停止服务,哪么可以使用-s quit参数来停止服务。例如:

[root@localhost logs]# /usr/local/nginx/sbin/nginx -s quit

该命令与快速停止 Nginx服务是有区别的。当快速停止服务时,worker进程与master进程在收到信号后会立即跳出循环,推出进程。而“优雅”的停止服务时, 首先会关闭监听端口,停止接受新的连接,然后把当前正在处理的连接全部处理完,最后再退出进程。

与快速停止服务类似,可以直接发送QUIT信号给master进程来停止服务,其效果与-s quit 命令是一样的。如:

[root@localhost logs]# kill -s SIGQUIT <nginx worker pid>        //此时ps查看后为91115

如果你希望“优雅”的停止某个worker进程,哪么可以通过向该进程发送WINCH信号来停止服务。例如:

[root@localhost logs]# kill -s SIGWINCH <nginx worker pid>

11、使运行中的nginx重读配置项并生效

 使用-s reload参数可以使运行中的Nginx服务重新加载nginx.conf文件。例如:

[root@localhost logs]# /usr/local/nginx/sbin/nginx -s reload

实际上,Nginx会先检查新的配置项是否有误,如果全部正确就以“优雅”的方式关闭,再重新启动Nginx来实现这个目的。类似的,-s是发送信号,仍然可以用kill 命令发送HUP信号来达到相同的效果。

[root@localhost logs]#kill -s SIGHUP <nginx master pid>

12、日志文件回滚

 使用-s reopen参数可以重新打开日志文件,这样可以把当前日志文件改名或者转移到其他目录中进行备份,在重新打开时候就会生成新的日志文件。这个功能使得日志文件不至于过大。例如:

[root@localhost logs]# /usr/local/nginx/sbin/nginx -s reopen

当然,这与使用kill命令发送USER1信号效果相同。

[root@localhost logs]# kill -s SIGUSER1 <nginx master pid>

13、平滑升级Nginx

当Nginx服务升级到新的版本时,必须要将旧的二进制文件Nginx替换掉,通常情况下这是需要重启服务的,但Nginx支持不重启服务来完成新版本的平滑升级。

升级时包括以下步骤:

1》通知正在运行的旧版本Nginx准备升级,通过向master进程发送USR2信号可达到的目的。例如:

[root@localhost logs]# kill -s SIGUSR2<nginx master pid>

这时,运行中的nginx会将pid文件重命名,如将/usr/local/nginx/logs/nginx.pid 重命名为 /usr/local/nginx/logs/nginx.pid.oldbin 这样新的Nginx 才有可能启动成功。

【亲测:此时用ps查看新旧版本的Nginx,都已经启动了。】

2》启动新版本的Nginx,可以使用以上介绍过的任意一种办法启动。这时候通过ps命令可以发现新旧版本的Nginx都在同时运行。

3》通过kill命令向旧的版本的master进程发送SIGQUIT信号,以“优雅”的方式关闭旧的版本的Nginx,随后将只有新版本的Nginx服务运行,此时平滑升级成功。

[root@localhost logs]# cat /usr/local/nginx/logs/nginx.pid
91867
[root@localhost logs]# cat /usr/local/nginx/logs/nginx.pid.oldbin
91278
[root@localhost logs]# kill -s SIGQUIT 91278

【亲测:此时文件nginx.pid.oldbin已经消失】

14、显示命令行帮助

使用-h 或者  -?参数会显示支持的所有命令行参数。

猜你喜欢

转载自blog.csdn.net/weixin_42167759/article/details/84999456
今日推荐