Re: kill -USR2 nginx无响应

291 views
Skip to first unread message

agentzh

unread,
Jan 25, 2013, 2:21:05 PM1/25/13
to Wenhua Zhang, openresty
Hello!

On Thu, Jan 24, 2013 at 11:11 PM, Wenhua Zhang wrote:
> 请教您一个nginx无缝升级的问题。
> 为了实现nginx版本的升级,对旧的PID发送“USR2”信号,但nginx的进程没有响应,并没有产生新的nginx进程。
>
> error log中有如下信息:
> 2013/01/25 14:22:46 [alert] 9635#0: execve() failed while executing
> new binary process "nginx" (2: No such file or directory)
>

这条错误消息解释了原因。

因为你的 nginx 老实例没有使用绝对路径启动,而是从 PATH 环境变量查找的,所以 Nginx 在接收到 USR2 信号时使用
execve() 执行原 Nginx 启动命令行的第一个参数启动新实例时就会报找不到 nginx 可执行文件的错误(而 execve()
并不会查找 PATH 环境变量)。

一般地,应当总是使用绝对路径来启动 nginx,以避免不必要的麻烦,即类似

$ /usr/sbin/nginx -c conf/nginx.conf

这种形式。

这个问题在 Nginx 俄语邮件列表中也有人遇到过:

http://mailman.nginx.org/pipermail/nginx-ru/2008-June/018239.html

值得一提的是,对于这个问题,查看 nginx 错误日志或者使用 strace 追踪系统调用都比使用 systemtap 要更直接更容易一些 :)

Best regards,
-agentzh

P.S. 同时抄送给 openresty 中文邮件列表:http://openresty.org/#Community

Wenhua Zhang

unread,
Jan 26, 2013, 9:06:07 AM1/26/13
to agentzh, openresty
多谢您的回复。
学到很多东西,再次表示感谢。
Reply all
Reply to author
Forward
0 new messages