前言
收到命令需要重启服务器的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
来检查是否启动
结语
任务完成。(~ ̄▽ ̄)~