场景:在nginx启动状态下,执行命令 nginx -s stop 和 nginx -s reload都报错:
[xxx@BMP-TEST-001 sbin]$ nginx -s stop
nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
报错的意思是大概就是没找到 nginx.pid这个文件。这个是什么文件呢?nginx.pid文件在启动Nginx时会自动生成,它记录了nginx的进程ID也就是pid, 主要用于管理Nginx进程,例如停止或重启Nginx。当Nginx无法找到该文件时,会导致启动或重新加载Nginx配置文件失败。
问题排查:
1、配置文件问题
第一步:修改配置文件
打开nginx.conf配置文件,可以看见如下一行配置
#pid logs/nginx.pid;
这里配置了nginx.pid文件的存放路径,需要去掉注释“#”,开启这个配置,当然我们也可以自定义配置路径。在下次重启后就会在指定路径生成对应的nginx.pid文件。
第二步:使用命令 nginx -c /usr/local/nignx/conf/nginx.conf 重新指定配置文件,再执行nginx -s stop 或者 nginx -s reload 看看是否还报错;如果不行,就通过ps -ef |grep nginx 命令拿到nginx的pid,使用命令kill - 9 pid杀掉所有nginx进程,然后再执行之前的命令(nginx -s stop 或者 nginx -s reload)检查是否报错。
2、Nginx相关文件权限问题
如果Nginx启用非特权用户(如nobody)来运行,并且无法写入指定的目录,则会导致无法生成nginx.pid文件。 这时候就需要更改文件或目录的所属用户和组,或者通过更改权限来解决这个问题。确保Nginx能够写入指定路径。