nginx的命令行控制

   我们在Linux中,需要使用命令行来控制nginx服务器的启动和关闭、重载配置文件、回滚日志文件、平滑升级等行为。我们假设nginx的安装目录为/usr/local/nginx/ 其二进制文件路径为/usr/local/nginx/sbin/nginx 配置文件路径为:/usr/local/nginx/conf/nginx.conf。

  •    1.默认nginx的启动方式

直接执行nginx的二进制程序

/usr/local/nginx/sbin/nginx

 这时会读取默认路径下的配置文件:/usr/local/nginx/conf/nginx.conf。(其实,如果没有显示指定nginx的配置文件路径,将会打开configure命令执行时使用--config-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参数是存在约束条件的:

  •       -g参数指定的配置项不能与默认路径下的nginx.conf中的配置项相冲突,否则无法启动nginx。如上例中,如果nginx默认的nginx.conf中存在类似:pid /tmp/nginx.conf的配置 则nginx是无法启动的
  •       以-g方式启动的nginx服务执行其他命令行时,需要把-g参数也带上,否则可能出现配置项不匹配的情形。例如,如果要停止nginx服务 则命令行代码如下:
/usr/local/nginx/sbin/nginx -g "pid /var/nginx/test.pid" -s stop
#因为如果不带上-g参数 则pid文件无法找到 也是无法启动nginx的
  •  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 aux| grep nginx#找出nginx master的进程ID
#接下来直接通过kill命令来发送信号
kill -s SIGTERM <nginx master进程ID>
或
kill -s SIGINT <nginx master 进程ID>
#上面指令执行效果与/usr/local/nginx/sbin/nginx -s stop 是一样的
  •  10.“优雅”地停止服务

如果我们希望nginx能够处理完当前所有请求之后再停止服务,那么可以使用-s quit参数来停止服务。

/usr/local/nginx/sbin/nginx -s quit
  •       -s stop属于快速停止服务,相对比较粗暴一点儿,worker和master进程在接收到信号后就会立即跳出循环,退出进程。
  •       -s quit的做法就比较优雅一点儿,首先会关闭监听端口,停止接收新的连接,然后把当前正在处理的连接全部处理完,最后再退出进程。

当然这种优雅的方式,也可以通过直接发送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文件。

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

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

kill -s SIGHUP <nginx master pid>
  •  12.日志文件回滚

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

/usr/local/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文件重命名,如将/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或者-?参数会显示支持的所有命令行参数。

猜你喜欢

转载自sonicery-d.iteye.com/blog/2185921
今日推荐