nginx教程第二篇:nginx命令行控制

在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

2.指定配置文件启动方式

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

/usr/local/nginx/sbin/nginx -c tmpnginx.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 varnginx/test.pid;"

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

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

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

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

如果不带上-g"pidvarnginx/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
10.快速地停止服务

使用-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:

computer: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是完全一样的

11.“优雅”地停止服务

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

/usr/local/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>
12.使运行中的Nginx重读配置项并生效

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

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

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

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

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

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

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

kill -s SIGUSR1 <nginx master pid>
14.平滑升级Nginx

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

  • 通知正在运行的旧版本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才有可能启动成功。

  • 启动新版本的Nginx, 可以使用以上介绍过的任意一种启动方法。 这时通过ps命令可以发现新旧版本的Nginx在同时运行。
  • 通过kill命令向旧版本的master进程发送SIGQUIT信号, 以“优雅”的方式关闭旧版本的Nginx。 随后将只有新版本的Nginx服务运行, 此时平滑升级完毕。
15.显示命令行帮助

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值