zoukankan      html  css  js  c++  java
  • 转载:Nginx的命令行控制(1.6)《深入理解Nginx》(陶辉)

    原文:https://book.2cto.com/201304/19621.html

           在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文件(参见1.5.1节)。

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

  • 相关阅读:
    react ts axios 配置跨域
    npm run eject“Remove untracked files, stash or commit any changes, and try again.”错误
    java 进程的参数和list的线程安全
    帆软报表 大屏列表跑马灯效果JS
    帆软报表 快速复用数据集,避免重复劳动
    分析云 OA中部门分级思路和实现方法
    分析云 分段器 只显示一个块的数据
    分析云 更改服务默认的端口号
    分析云U8项目配置方法新版本(2)
    Oracle 创建时间维度表并更新是否工作日字段
  • 原文地址:https://www.cnblogs.com/huiy/p/8352449.html
Copyright © 2011-2022 走看看