Nginx的命令行控制

服务器管理 强烈建议 2024-02-07 14:20 194 0

  在 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

  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 或者 -? 参数会显示支持的所有命令行参数。



时间:(2024-02-07 14:20:41)
本站资源均来自互联网或会员发布,如果不小心侵犯了您的权益请与我们联系。我们将立即删除!谢谢!