ChsCommandLine

 Nginx中文文档 > 运行和控制 Nginx - 命令行参数和信号 

不像许多其他软件系统，Nginx 仅有数个命令行参数，完全通过配置文件来配置（想象一下）.


 * [#options 选项]
 * [#example 示例]
 * [#lncus 使用信号加载新的配置]
 * [#utnbotf 平滑升级到新的二进制代码]

选项
-c    为 Nginx 指定一个配置文件，来代替缺省的.

-t   不运行，而仅仅测试配置文件. nginx 将检查配置文件的语法的正确性，并尝试打开配置文件中所引用到的文件.

-v   显示 nginx 的版本.

-V   显示 nginx 的版本，编译器版本和配置参数.

示例
这个示例仅测试指定位置的配置文件是否正常，并给出提示. /usr/bin/nginx -t -c ~/mynginx.conf

在windows下启动nginx的批处理文件(somaceo提供) 在网上下载process.exe和RunHiddenConsole.exe放在nginx安装目录下，并建立一个 启动nginx.bat 文件，内容如下，路径等地址参数按自己的实际情况可以修改. @echo off cd nginx>nul echo 正在停止Nginx进程...... process.exe -k nginx.exe>nul echo 正在停止PHP(FastCGI)进程......

rem process.exe -k php-cgi.exe>nul echo Nginx+PHP已停止.

@echo off cd nginx>nul echo 正在启动PHP(FastCGI)进程...... echo 路径使用相对本批处理文件的相对路径，（也可以使用绝对路径，但不利于拷贝迁移），指明引用的地址:端口，加载特定位置的php.ini文件. 如果不用php这部分就不要理了. RunHiddenConsole.exe ..\..\PHP\php-cgi.exe -b 127.0.0.1:9000 -c ..\..\PHP\php.ini echo PHP已启动.

echo nginx 将检查指定的配置文件的语法的正确性，并尝试打开配置文件中所引用到的文件. nginx.exe -t -c conf/nginx.conf

echo -v 显示 nginx 的版本. v字有大小之分 参考：http://wiki.nginx.org/NginxChsCommandLine nginx.exe -v echo 下一步启动Nginx进程...... echo 正在启动Nginx进程...... nginx.exe -c conf/nginx.conf

echo Nginx+PHP已启动. rem 用pause暂停保留命令窗口看看有没有错误发生 pause exit = 通过系统的信号控制 Nginx = 可以使用信号系统来控制主进程. 默认，nginx 将其主进程的 pid 写入到 /usr/local/nginx/logs/nginx.pid 文件中. 通过传递参数给 ./configure 或使用 pid 指令，来改变该文件的位置.

主进程可以处理以下的信号： {| border="1"
 * 信号，它会尝试先解析配置文件（如果指定配置文件，就使用指定的，否则使用默认的），成功的话，就应用新的配置文件（例如：重新打开日志文件或监听的套接字）. 之后，nginx 运行新的工作进程并从容关闭旧的工作进程. 通知工作进程关闭监听套接字但是继续为当前连接的客户提供服务. 所有客户端的服务完成后，旧的工作进程被关闭. 如果新的配置文件应用失败，nginx 将继续使用旧的配置进行工作.
 * 信号，它会尝试先解析配置文件（如果指定配置文件，就使用指定的，否则使用默认的），成功的话，就应用新的配置文件（例如：重新打开日志文件或监听的套接字）. 之后，nginx 运行新的工作进程并从容关闭旧的工作进程. 通知工作进程关闭监听套接字但是继续为当前连接的客户提供服务. 所有客户端的服务完成后，旧的工作进程被关闭. 如果新的配置文件应用失败，nginx 将继续使用旧的配置进行工作.

RequestForReviewCategory -- (Request For Review: Just What Happens With The Worker Processes at a HUP? -Olle)

平滑升级到新的二进制代码
你可以在不中断服务的情况下 - 新的请求也不会丢失，使用新的 nginx 可执行程序替换旧的（当升级新版本或添加/删除服务器模块时）.

首先，使用新的可执行程序替换旧的（最好做好备份），然后，发送 USR2 (kill -USR2 pid)信号给主进程. 主进程将重命名它的 .pid 文件为 .oldbin (比如：/usr/local/nginx/logs/nginx.pid.oldbin)，然后执行新的可执行程序，依次启动新的主进程和新的工作进程：


 * PID PPID USER    %CPU   VSZ WCHAN  COMMAND

33126    1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx 33134 33126 nobody  0.0  1368 kqread nginx: worker process (nginx) 33135 33126 nobody  0.0  1380 kqread nginx: worker process (nginx) 33136 33126 nobody  0.0  1368 kqread nginx: worker process (nginx) 36264 33126 root    0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody  0.0  1364 kqread nginx: worker process (nginx) 36266 36264 nobody  0.0  1364 kqread nginx: worker process (nginx) 36267 36264 nobody  0.0  1364 kqread nginx: worker process (nginx)

在这时，两个 nginx 实例会同时运行，一起处理输入的请求. 要逐步停止旧的实例，你必须发送 WINCH 信号给旧的主进程，然后，它的工作进程就将开始从容关闭：


 * PID PPID USER    %CPU   VSZ WCHAN  COMMAND

33126    1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx 33135 33126 nobody  0.0  1380 kqread nginx: worker process is shutting down (nginx) 36264 33126 root    0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody  0.0  1364 kqread nginx: worker process (nginx) 36266 36264 nobody  0.0  1364 kqread nginx: worker process (nginx) 36267 36264 nobody  0.0  1364 kqread nginx: worker process (nginx)

一段时间后，旧的工作进程处理了所有已连接的请求后退出，就仅由新的工作进程来处理输入的请求了：


 * PID PPID USER    %CPU   VSZ WCHAN  COMMAND

33126    1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx 36264 33126 root    0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody  0.0  1364 kqread nginx: worker process (nginx) 36266 36264 nobody  0.0  1364 kqread nginx: worker process (nginx) 36267 36264 nobody  0.0  1364 kqread nginx: worker process (nginx)

这时，因为旧的服务器还尚未关闭它监听的套接字，所以，通过下面的几步，你仍可以恢复旧的服务器：

新的主进程退出后，旧的主进程会由移除 .oldbin 前缀，恢复为它的 .pid 文件，这样，一切就都恢复到升级之前了.
 * 发送 HUP 信号给旧的主进程 - 它将在不重载配置文件的情况下启动它的工作进程
 * 发送 QUIT 信号给新的主进程，要求其从容关闭其工作进程
 * 发送 TERM 信号给新的主进程，迫使其退出
 * 如果因为某些原因新的工作进程不能退出，向其发送 KILL 信号

如果尝试升级成功，而你也希望保留新的服务器时，发送 QUIT 信号给旧的主进程使其退出而只留下新的服务器运行：


 * PID PPID USER    %CPU   VSZ WCHAN  COMMAND
 * 36264    1 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
 * 36265 36264 nobody  0.0  1364 kqread nginx: worker process (nginx)
 * 36266 36264 nobody  0.0  1364 kqread nginx: worker process (nginx)
 * 36267 36264 nobody  0.0  1364 kqread nginx: worker process (nginx)

参考
命令行选项

信号