欢迎光临
我们一直在努力

Nginx的命令行控制

建站超值云服务器,限时71元/月

在 Linux 中,需要使用命令行来控制 Nginx 服务器的启动与停止、重载配置文件、回滚日志文件、平滑升级等行为。默认情况下,Nginx 被安装在目录
/usr/local/nginx/ 中,其二进制文件路径为 /usr/local/nginc/sbin/nginx,配置文件路径为
/usr/local/nginx/conf/nginx.conf。当然,在 configure 执行时是可以指定把它们安装在不同目录的。

(1)默认方式启动

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

/usr/local/nginx/sbin/nginx

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

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

(2)另行指定配置文件的启动方式使用 -c 参数指定配置文件。例如:

/usr/local/nginx/sbin/nginx -c /tmp/nginx.conf

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

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

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

/usr/local/nginx/sbin/nginx -p /usr/local/nginx/

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

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

/usr/local/nginx/sbin/nginx -g "pid /var/nginx/test.pid;"

上面这行命令意味着会把 pid 文件写到 /var/nginx/test.pid 中。

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

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

/usr/local/nginx/sbin/nginx -g "pid /var/nginx/test.pid;" -s stop

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

(5)测试配置信息是否有错误

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

/usr/local/nginx/sbin/nginx -t

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

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

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

/usr/local/nginx/sbin/nginx -t -q

(7)显示版本信息

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

/usr/local/nginx/sbin/nginx -v

(8)显示编译阶段的参数

使用 -V 参数除了可以显示 Nginx 的版本信息外,还可以显示配置编译阶段的信息,如

GCC 编译器的版本、操作系统的版本、执行configure 时的参数等。例如:

/usr/local/nginx/sbin/nginx -V

(9)快速地停止服务

使用 -s stop 可以强制停止 Nginx 服务。-s 参数其实是告诉 Nginx 程序向正在运行的

Nginx 服务发送信号量,Nginx 程序通过 nginx.pid 文件中得到 master 进程的进程 ID,再向运行中的 master 进程发送
TERM 信号来快速地关闭 Nginx 服务。例如:

/usr/local/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

上述两条命令的效果与执行 /usr/local/nginx/sbin/nginx -s stop 是完全一样的。

(10)“优雅”地停止服务

如果希望 Nginx 服务可以正常地处理完当前所有请求再停止服务,那么可以使用 -s quit

参数来停止服务。例如:

/usr/local/nginx/sbin/nginx -s quit

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

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

kill -s SIGQUIT

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

kill -s SIGWINCH

(11)使运行中的 Nginx 重读配置项并生效

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

/usr/local/nginx/sbin/nginx -s reload

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

kill -s SIGHUP

(12)日志文件回滚

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

/usr/local/nginx/sbin/nginx -s reopen

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

kill -s SIGUSR1

(13)平滑升级 Nginx

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

升级时包括以下步骤:

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

kill -s SIGUSR2

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

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

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

(14)显示命令行帮助

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

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » Nginx的命令行控制
分享到: 更多 (0)