解决Nginx因服务器异常重启后,重新加载./nginx -s reload命令时,会出现报错问题:Nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
nginx.pid这个文件主要的作用是为了防止用户同时启动多个nginx(其他PID文件也是相同的道理)。那nginx在启动时怎么知道已经有正在运行的Nginx了呢?每一个Nginx都是一个进程,每个进程都有一个全局唯一的id号,叫做pid。进程无法检测其他进程的,那么在启动nginx时也就不知道当前有没有nginx服务。为了能进行沟通,必须要有一个东西来传递信息,这个东西就是pid文件,里面保存的是进程的id值。
当Nginx启动时,会先检测有没有nginx.pid文件,如果没有则创建一个,并把自身的pid写进去。如果检测到已经有了nginx.pid文件,但nginx检测到并没有哪个进程的id和该文件中id值相同,那么pid指向的进程不存在,nginx会正常启动,并把本次启动的pid写入nginx.pid文件中,反之,如果检测到有nginx.pid文件,同时该pid指向的进程存在,则说明nginx服务已经存在,那么本次启动nginx服务会报错。
第一种方式解决:
第1步:查看nginx的运行进程 :ps -ef|grep nginx
第2步:杀死nginx或者停止nginx的服务:pkill -9 nginx
第3步:修改nginx的配置文件,打开pid的进程的绝对路径:/usr/local/nginx/logs/nginx.pid
第4步:在配置文件的所编辑的路径下创建默认的pid文件:
cd /usr/local/nginx/logs/
vi nginx.pid
第5步:启动nginx即可解决;
第二种方式解决:
第1步:停止nginx的服务:pkill -9 nginx
第2步:使用配置文件启动nginx
sudo /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
最后nginx的最常用的命令
1、启动命令:./nginx 启动
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
2、检测配置文件的命令:
sudo /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
3、重新加载的命令:./nginx -s reload
4、停止服务退出的命令:./nginx -s stop