虚拟机重启后再次重启nginx: [error] open() “/var/run/nginx/nginx.pid“ failed (2: No such file or directory)

昨天,服务器进行清理,关闭了服务器,今天,输入域名想要访问服务器发现网页打不开了,首先想到的是nginx的问题,然后就登录服务器重启了nginx,结果出现了这个错误:nginx: [error] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)
问题分析:
提示信息提示在/var/run/nginx/目录下找不到nginx.pid文件
解决方法:
方法一、修改nginx.conf配置文件
1.cd /usr/local/nginx/conf 进入conf目录,编辑配置文件nginx.conf
2.配置文件中有个注释的地方: #pid        logs/nginx.pid;
将注释解开,并修改为pid    /usr/local/nginx/logs/nginx.pid;
此时,如果我们启动nginx可能会存在这个问题:nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (2: No such file or directory) 2021/10/30 19:08:56 [emerg] 6996#0: open() "/usr/local/nginx/logs/access.log" failed (2: No such file or directory)
这是为什么呢?因为我们/usr/local/nginx目录下没有logs文件夹呀!继续后面的步骤:
3.在/usr/local/nginx目录下创建logs目录:mkdir /usr/local/nginx/logs
4.启动nginx服务: /usr/local/nginx/sbin/nginx
启动成功,查看nginx启动情况
方法二、创建目录/var/run/nginx/
1.cd /var/run 进入run目录,创建nginx文件夹
2.创建nginx.pid文件:touch nginx.pid
3.启动nginx服务: /usr/local/nginx/sbin/nginx
启动成功,查看nginx启动情况
最后,我们分析一下为什么会产生这个问题:
nginx被停止时,var/run/nginx.pid被删除了。 reload命令需要通过nginx.pid获取进程号,会去找var/run.nginx.pid ,如果不存在,就报错了。  reload是在nginx启动的情况下做平滑重启的,他们都依赖于nginx进程存在的情况下,如果我们服务器关闭,那么应该是用nginx的启动命令进行启动,而不是重启。
最近每天都关闭服务器,设置nginx开机自启没有成功,两天都鼓捣这个nginx启动了,今天发现原来自己闹了个大笑话,,,,,,不过有收获啦,嘿嘿
另外,启动nginx之后,如果发现浏览器依旧打不开,那么,我们可以从下面两方面排查:
1.nginx端口号是否启动(nginx默认端口号是80)
#查看要用的端口号是否开启
sudo firewall-cmd --zone=public --query-port=端口号/tcp
#防火墙启动了但是端口号没有被开启,则开启要用的端口号
sudo firewall-cmd --zone=public --add-port=端口号/tcp --permanent
2.端口号启动了网页还是不能打开,考虑防火墙是否开启
#重启防火墙
sudo systemctl restart firewalld.service
如果上面两个方法还是没有解决您的问题,那么就要去查更多的资料啦,不过不要难过,解决问题的过程才是成长的过程嘛~~~
小tips:
启动nginx的命令为     /usr/local/nginx/sbin/nginx   没有提示表示启动成功
停止nginx的命令为    /usr/local/nginx/sbin/nginx -s stop
重启nginx的命令为    /usr/local/nginx/sbin/nginx -s reload
检查语法                   /usr/local/nginx/sbin/nginx -t
另外,启动成功之后发现一个有意思的情况,一个服务,好多个进程,有一个master和多个worker,查了些资料和大家分享:
nginx.pid文件就是一个纯文本文件,存放的是nginx的master进程的进程号。
nginx工作中,包括一个master进程,多个worker进程。worker进程负责具体的http等相关工作,master进程主要是进行控制等控制。
nginx -s  reload 命令加载修改后的配置文件,命令下达后会发生如下事件:
1. Nginx的master进程检查配置文件的正确性,若是错误则返回错误信息,nginx继续采用原配置文件进行工作
2. Nginx启动新的worker进程,采用新的配置文件
3. Nginx将新的请求分配新的worker进程
4. Nginx等待以前的worker进程的全部请求已经都返回后,关闭相关worker进程
5. 重复上面过程,直到全部旧的worker进程都被关闭掉。
重启之后,master的进程号不变,worker的进程号会改变。
漂亮~~~

猜你喜欢

转载自blog.csdn.net/hejingfang123/article/details/121086911