Nginx命令行控制

在Linux中,须要使用命令行来控制Nginx服务器的启动与中止、重载配置文件、回滚日志文件、平滑升级等行为。默认状况下,Nginx被安装在目录usrlocal/nginx/中,其二进制文件路径为usrlocal/nginc/sbin/nginx,配置文件路径为usrlocal/nginx/conf/nginx.conf。固然,在configure执行时是能够指定把它们安装在不一样目录的。为了简单起见,本节只说明默认安装状况下的命令行的使用状况,若是读者安装的目录发生了变化,那么替换一下便可。
nginx

(1)默认方式启动
直接执行Nginx二进制程序。例如:
usrlocal/nginx/sbin/nginx
这时,会读取默认路径下的配置文件:usrlocal/nginx/conf/nginx.conf。
实际上,在没有显式指定nginx.conf配置文件路径时,将打开在configure命令执行时使用--conf-path=PATH指定的nginx.conf文件。api

(2)另行指定配置文件的启动方式
使用-c参数指定配置文件。例如:
usrlocal/nginx/sbin/nginx -c tmpnginx.conf
这时,会读取-c参数后指定的nginx.conf配置文件来启动Nginx。服务器

(3)另行指定安装目录的启动方式
使用-p参数指定Nginx的安装目录。例如:
usrlocal/nginx/sbin/nginx -p usrlocal/nginx/架构

(4)另行指定全局配置项的启动方式
能够经过-g参数临时指定一些全局配置项,以使新的配置项生效。例如:
usrlocal/nginx/sbin/nginx -g "pid varnginx/test.pid;"
上面这行命令意味着会把pid文件写到varnginx/test.pid中。
-g参数的约束条件是指定的配置项不能与默认路径下的nginx.conf中的配置项相冲突,不然没法启动。就像上例那样,相似这样的配置项:pid logs/nginx.pid,是不能存在于默认的nginx.conf中的。
另外一个约束条件是,以-g方式启动的Nginx服务执行其余命令行时,须要把-g参数也带上,不然可能出现配置项不匹配的情形。例如,若是要中止Nginx服务,那么须要执行下面代码:
usrlocal/nginx/sbin/nginx -g "pid varnginx/test.pid;" -s stop
若是不带上-g"pidvarnginx/test.pid;",那么找不到pid文件,也会出现没法中止服务的状况。测试

(5)测试配置信息是否有错误
在不启动Nginx的状况下,使用-t参数仅测试配置文件是否有错误。例如:
usrlocal/nginx/sbin/nginx -t
执行结果中显示配置是否正确。ui

(6)在测试配置阶段不输出信息
测试配置选项时,使用-q参数能够不把error级别如下的信息输出到屏幕。例如:
usrlocal/nginx/sbin/nginx -t –q操作系统

(7)显示版本信息
使用-v参数显示Nginx的版本信息。例如:
usrlocal/nginx/sbin/nginx –v命令行

(8)显示编译阶段的参数
使用-V参数除了能够显示Nginx的版本信息外,还能够显示配置编译阶段的信息,如GCC编译器的版本、操做系统的版本、执行configure时的参数等。例如:
usrlocal/nginx/sbin/nginx –V日志

(9)快速地中止服务
使用-s stop能够强制中止Nginx服务。-s参数实际上是告诉Nginx程序向正在运行的Nginx服务发送信号量,Nginx程序经过nginx.pid文件中获得master进程的进程ID,再向运行中的master进程发送TERM信号来快速地关闭Nginx服务。例如:
usrlocal/nginx/sbin/nginx -s stop
实际上,若是经过kill命令直接向nginx master进程发送TERM或者INT信号,效果是同样的。例如,先经过ps命令来查看nginx master的进程ID:
:ahf5wapi001:root > ps -ef | grep nginx
root 10800 1 0 02:27 ? 00:00:00 nginx: master process ./nginx
root 10801 10800 0 02:27 ? 00:00:00 nginx: worker process
接下来直接经过kill命令来发送信号:
kill -s SIGTERM 10800
或者:
kill -s SIGINT 10800
上述两条命令的效果与执行usrlocal/nginx/sbin/nginx-s stop是彻底同样的。进程

(10)“优雅”地中止服务
若是但愿Nginx服务能够正常地处理完当前全部请求再中止服务,那么可使用-s quit参数来中止服务。例如:
usrlocal/nginx/sbin/nginx -s quit
该命令与快速中止Nginx服务是有区别的。当快速中止服务时,worker进程与master进程在收到信号后会马上跳出循环,退出进程。而“优雅”地中止服务时,首先会关闭监听端口,中止接收新的链接,而后把当前正在处理的链接所有处理完,最后再退出进程。
与快速中止服务类似,能够直接发送QUIT信号给master进程来中止服务,其效果与执行-s quit命令是同样的。例如:
kill -s SIGQUIT <nginx master pid>
若是但愿“优雅”地中止某个worker进程,那么能够经过向该进程发送WINCH信号来中止服务。例如:
kill -s SIGWINCH <nginx worker pid>

(11)使运行中的Nginx重读配置项并生效
使用-s reload参数可使运行中的Nginx服务从新加载nginx.conf文件。例如:
usrlocal/nginx/sbin/nginx -s reload
事实上,Nginx会先检查新的配置项是否有误,若是所有正确就以“优雅”的方式关闭,再从新启动Nginx来实现这个目的。相似的,-s是发送信号,仍然能够用kill命令发送HUP信号来达到相同的效果。
kill -s SIGHUP <nginx master pid>

(12)日志文件回滚
使用-s reopen参数能够从新打开日志文件,这样能够先把当前日志文件更名或转移到其余目录中进行备份,再从新打开时就会生成新的日志文件。这个功能使得日志文件不至于过大。例如:
usrlocal/nginx/sbin/nginx -s reopen
固然,这与使用kill命令发送USR1信号效果相同。
kill -s SIGUSR1 <nginx master pid>

(13)平滑升级Nginx
当Nginx服务升级到新的版本时,必需要将旧的二进制文件Nginx替换掉,一般状况下这是须要重启服务的,但Nginx支持不重启服务来完成新版本的平滑升级。
升级时包括如下步骤:
1)通知正在运行的旧版本Nginx准备升级。经过向master进程发送USR2信号可达到目的。例如:
kill -s SIGUSR2 <nginx master pid>
这时,运行中的Nginx会将pid文件重命名,如将usrlocal/nginx/logs/nginx.pid重命名为usrlocal/nginx/logs/nginx.pid.oldbin,这样新的Nginx才有可能启动成功。
2)启动新版本的Nginx,可使用以上介绍过的任意一种启动方法。这时经过ps命令能够发现新旧版本的Nginx在同时运行。
3)经过kill命令向旧版本的master进程发送SIGQUIT信号,以“优雅”的方式关闭旧版本的Nginx。随后将只有新版本的Nginx服务运行,此时平滑升级完毕。

(14)显示命令行帮助
使用-h或者-?参数会显示支持的全部命令行参数。


参考书籍:《深刻理解Nginx模块开发与架构解析》

相关文章
相关标签/搜索