如何在OS X上重新启动nginx

我在OS X 10.8上使用nginx 。 刚安装kill nginx_pid nginx却找不到重启nginx的方法,除了kill nginx_pidkill 64116 。 想知道是否有更好的方法来重新启动nginx

在Google和SO上find了一些方法,但没有奏效:

 nginx -s restart sudo fuser -k 80/tcp ; sudo /etc/init.d/nginx restart 

nginx -s restart的错误信息是

 nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory) 

有时也会得到这个错误消息:

 nginx: invalid option: "-s restart" 

什么是你的nginx pid文件位置? 这是在configuration文件中指定的,在configuration脚本中指定了编译时的默认path。 你可以这样search它:

find / -name nginx.pid 2>/dev/null (在nginx运行时必须发出)

解:

 sudo mkdir -p /usr/local/var/run/ ln -s /current/path/to/pid/file /usr/local/var/run/nginx.pid 

尝试在启动nginx之前运行sudo nginx nginx。

重新加载configuration文件:

 sudo nginx -s reload 

要完全重新启动nginx

 sudo nginx -s quit sudo nginx 

细节

nginx没有restart信号。 从文档,这里是主进程接受的信号:

 SIGINT, SIGTERM Shut down quickly. SIGHUP Reload configuration, start the new worker process with a new configuration, and gracefully shut down old worker processes. SIGQUIT Shut down gracefully. SIGUSR1 Reopen log files. SIGUSR2 Upgrade the nginx executable on the fly. SIGWINCH Shut down worker processes gracefully. 

大概你可以手动发送这些信号到进程ID,但是nginx命令有标志nginx -s <signal> ,它将信号发送给你的主进程。 您的select是:

 stop SIGTERM quit SIGQUIT reopen SIGUSR1 reload SIGHUP 

无需手动与pid进行通话。


编辑:刚刚意识到这个信息的大部分已经在其他答案的意见。 无论如何,这里留下来总结的情况。

我这样做:

首先杀死进展

 ps aux | grep nginx kill -9 {pid} 

然后启动nginx

 nginx 

有用!

作为未来的资源,你可以参考http://wiki.nginx.org/CommandLine

Nginx可能以root身份运行,所以您需要运行以下命令的变体来影响它。

 sudo nginx -s stop | reload | quit | reopen 

通常没有太多的理由像Apache一样重新启动Nginx 。 如果你修改了一个configuration文件,你可能只想重新加载选项。

检查这个目录是否存在:

 /usr/local/var/run 

当nginx尝试初始化不存在的本地化pid文件时,可能会发生此错误。

这里有个bug。 取决于nginx是否在你修改/重新启动apache和/或修改nginxconfiguration时正在运行,这个文件(实际上只是一个进程ID指针)可能被销毁。

当你试图发送任何信号给nginx像

 nginx -s quit; nginx -s stop; nginx -s reload; 

nginx使用这个文件来引用它需要发送信号的进程的ID。 如果文件不存在,则nginx和cli应用程序的活动运行进程之间的链接被有效破坏。

我实际上最终处于一个两个nginx进程同时运行的状态,所以两个都被杀死了。

要解决这个问题,你可以通过活动监视器强制终止现有的nginx进程(然后运行nginx并让cli应用程序创build一个新的nginx.pid文件),或者如果你真的需要保持nginx运行,但是想运行nginx – 重新加载 – 在/ runpath中手动创build一个名为nginx.pid的文件,并插入当前运行的nginx进程的PID(通过Activity Monitor获取)。

重新加载自定义configuration文件的使用

 nginx -s reload -c /etc/nginx/conf.d/<config file>.conf 

这可能只是意味着nginx已经停止了 – 目前没有运行。
首先确认nginx是否在运行,执行:

 $ ps aux | grep nginx 

停止或重新加载的一种方法是通过下面的命令,

停止:

 sudo /usr/local/nginx/sbin/nginx -s stop 

只有在nginx运行时才运行重载:

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

通过这样做,你不会得到nginx:[错误]打开()“/usr/local/var/run/nginx.pid”这个问题

尝试这个:

sudo nginx -s stop

其次是:

sudo nginx

看来,nginx跟踪它的状态,如果你停下来两次,它会抱怨。 但上面的工作对我来说。