Nginx 无效的 PID 号

Posted

技术标签:

【中文标题】Nginx 无效的 PID 号【英文标题】:Nginx Invalid PID number 【发布时间】:2011-11-30 14:39:25 【问题描述】:

我发出了 nginx -s stop,然后在尝试重新加载它时出现此错误。

[错误]:“/var/run/nginx.pid”中的无效PID号“”

那个 /var/run/nginx/pid 文件是空的 atm。

我需要做什么来修复它?

【问题讨论】:

【参考方案1】:

nginx -s reload 仅用于告诉正在运行的 nginx 进程重新加载其配置。停止后,您没有正在运行的 nginx 进程向其发送信号。只需运行 nginx(可能使用 -c /path/to/config/file)

【讨论】:

在当前发行版的股票安装中,您可能希望使用启动脚本:sudo service nginx start【参考方案2】:

在我的情况下,我通过启动服务解决了这个问题。

sudo /etc/init.d/nginx 启动

上面的命令将在 Debian/Ubuntu 中启动服务。如果有任何问题(如 Apache 在同一个端口监听)会报错

在这之后 nginx -s reload 将像魅力一样工作

【讨论】:

【参考方案3】:

在我下载的最新版本(1.2.0)中没有“-s start”选项,它会说 nginx:无效选项:“-s start”

你可以通过

启动nginx
sudo /etc/nginx/sbin/nginx

服务器将被启动,然后不会有任何无效的 pid number 错误。

【讨论】:

【参考方案4】:

在我的情况下,nginx 被停止了(我假设崩溃了)。通过以下方式解决了问题:

service nginx status
nginx stop/waiting

service nginx start
nginx start/running, process 3535

然后 nginx -s reload 就像一个魅力。

我在 trusty 上使用 nginx/1.8.0。

【讨论】:

很奇怪 nginx 文档怎么没有包含这些命令。只需说“要启动 nginx,请运行可执行文件。”!!我不知道他们为什么不包括以下行:sudo service nginx start 【参考方案5】:

为避免重启 nginx 造成停机,

ps aux | grep nginx 
PID of nginx master process

echo PID > /var/run/nginx.pid
nginx -s reload

【讨论】:

如果which pgrep不为空,则更简单的版本为pgrep 'nginx: master process' > /var/run/nginx.pid,然后运行reload。【参考方案6】:

这将清除 ubuntu 16.04 及更高版本上的问题

sudo service nginx stop    

您可能需要删除 pid 文件 nginx.pid,其位置可能在文件 /etc/nginx/nginx.conf 中定义,查找类似行

cat /etc/nginx/nginx.conf | grep pid  #  see if pid file is defined

这一行可能存在于文件/etc/nginx/nginx.conf

pid /run/nginx.pid;  #  in file /etc/nginx/nginx.conf

如果 pid 文件确实存在,则立即删除它

ls -la  /var/run/nginx/pid  #  this file may live elsewhere
ls -la  /run/nginx.pid  #  on Ubuntu 16.04+

在 pid 文件被删除后,让我们启动 nginx

sudo service nginx start

ps -eaf|grep nginx        #  confirm its running

sudo nginx -t && sudo nginx -s reload   #  confirm config is OK

#      typical output
#  nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
#  nginx: configuration file /etc/nginx/nginx.conf test is successful


sudo service nginx stop   #   issue stop

ps -eaf|grep nginx        #   confirm it actually stopped

现在理智已经恢复,你可以随意启动

【讨论】:

【参考方案7】:

在 CentOS 7 上,我这样做了:

 sudo systemctl start nginx
 #Then check all things are OK
 sudo systemctl status -l nginx

【讨论】:

【参考方案8】:

如果nginx 进程被手动停止或被杀死,就会发生这种情况。

检查进程是否仍在运行:

sudo lsof -nP -iTCP:<port> | grep LISTEN

我在 mac 上,我重新安装了 nginx:

brew reinstall nginx

然后使用 brew 启动服务:

brew services start nginx

【讨论】:

以上是关于Nginx 无效的 PID 号的主要内容,如果未能解决你的问题,请参考以下文章

centos 7:nginx 无法从文件 /run/nginx.pid 读取 PID:无效参数

text nginx:[error]“/var/run/nginx.pid”中的无效PID编号“”

nginx reload无效解决方法

asp 中 错误的参数个数或无效的参数属性值问题

Nginx在reload时候报错invalid PID number

nginx跨域设置无效的解决办法 Nginx跨域设置Access-Control-Allow-Origin无效的解决办法