nginx: [error] 24361#0: invalid PID number ““ in “/run/nginx.pid“ 与(98: Address already in use)

前言

收到命令需要重启服务器的Nginx服务。
但是直接执行sudo nginx -s reload失败显示

invalid PID number “” in “/run/nginx.pid” 与(98: Address already in use)

对此展开调查和尝试解决

阶段一,执行sudo nginx -c /etc/nginx/nginx.conf

分析故障名称得知这是nginx重新加载配置文件时候报错,对此需要检查配置文件是否可行。

先运行:
sudo nginx -t -c /etc/nginx/nginx.conf
判断配置文件是否基础正常。

如果通过判断则运行sudo nginx -c /etc/nginx/nginx.conf

正常情况下,这样就可以了,但是如果收到某些因素的干扰导致之前就有一个Nginx的进程占用了端口就会导致报错如下类似信息:

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)

阶段二:关闭进程 sudo kill -QUIT XXX

无效的操作

会考虑关闭占用端口的进程,但是这样是无效的
如果真想这么做,流程如下:

提示的占用的是443端口,但是直接用 netstat -lnp|grep 443指令看到的是不包含PID的结果:

tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN -

需要用sudo netstat -lnp|grep 443

tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 1321/nginx: worker
从而得知占用端口的为1321

随后执行sudo kill 1321

但是继续观察会发现,这个进程会重新启动,这是因为关键进程没有被关闭

正确操作

执行·ps -ef | grep nginx
获得master进程PID:

root 2650 1 0 Jun30 ? 00:00:00 nginx: master process nginx -c /etc/nginx/nginx.conf

执行sudo kill -QUIT 2650

至此等待几分钟后,用·ps -ef | grep nginx来检查是否关闭,如果没有master则表示Nginx服务停止,可以重新启动了,
启动的流程为运行sudo nginx -c /etc/nginx/nginx.conf

此后可以用·ps -ef | grep nginx来检查是否启动

结语

任务完成。(~ ̄▽ ̄)~

上一篇:firewalld拦截,导致安装ssl证书后https无法访问


下一篇:git设置代理解决Failed to connect to github.com port 443: Timed out