IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Nginx重启报错: [error] open() “/usr/local/nginx/logs/nginx.pid“ failed (2: No such file or directory) -> 正文阅读

[系统运维]Nginx重启报错: [error] open() “/usr/local/nginx/logs/nginx.pid“ failed (2: No such file or directory)

? ? ? ?今天因为阿里云的ECS云服务器内存不够用了,直接进行了系统的配置升级并且重启了系统,因为系统里安装了Nginx + Tomcat 服务器配置,因此先重启了Tomcat,接着准备重启Nginx, 执行命令:/usr/local/nginx/sbin/nginx -s reload,结果启动失败,报出了错误:nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)。难道系统升个级还把原先运行正常的软件给搞出问题来了,赶紧查看了数据库,还好正常运行,看来应该不是什么大问题,于是慢下心来查找错误原因。

? ? ? ?首先看这个错误提示是 nginx.pid 文件缺失导致的错误,搜了一下网上的解决方案,其中一个方案是新建一个nginx.pid文件;或者采用第二方案:第一步先Kill nginx;第二步是执行启动命令,通过参数 -c 指定nginx 配置文件的路径(经测试,这里不指定配置文件也是可以的);第三步再检验重新启动命令是否报错。

[root@iZ2ze4ef9xk9hkxafq58d9Z ~]# pkill -9 nginx
[root@iZ2ze4ef9xk9hkxafq58d9Z ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
[root@iZ2ze4ef9xk9hkxafq58d9Z ~]# /usr/local/nginx/sbin/nginx -s reload

? ? ? ?虽然两个方案都能解决问题,但有些浮于表面,为什么之前的好好的文件会缺失不见了呢?

? ? ? ?经过笔者测试,在控制台执行命令:'/usr/local/nginx/sbin/nginx -s stop' 或者 '/usr/local/nginx/sbin/nginx -s quit' 成功退出nginx后,'/usr/local/nginx/logs/nginx.pid' 文件就会自动被清理掉。然后继续执行重启命令:/usr/local/nginx/sbin/nginx -s reload,就会报找不到pid文件的错误:?[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)。现在接着执行正常的启动命令:/usr/local/nginx/sbin/nginx 后,又发现一个新的PID文件被创建了,所以此时再次执行nginx -s reload就不会提示错误了。根据上面的测试,现在可以推断,在重启系统的过程中,nginx退出同时也清理了pid文件,所以在系统重启完成后,直接执行nginx reload命令就会因为找不到pid文件报错了。

? ? ? ?报错背后的原因找到了。但是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服务会报错。

最后附上 nginx 启动和退出的命令:

//查看nginx是否已经启动
ps ajx|grep nginx
//启动
/usr/local/nginx/sbin/nginx
//重启
/usr/local/nginx/sbin/nginx -s reload
//退出
/usr/local/nginx/sbin/nginx -s quit
//退出
/usr/local/nginx/sbin/nginx -s stop

quit 与 stop 两种退出方式的区别:

Quit is a graceful shutdown. Nginx finishes serving the open connections before shutdown

Quit 是一个优雅的关闭方式,Nginx在退出前完成已经接受的连接请求。

Stop is a quick shutdown where is terminates in between serving the connection

Stop 是快速关闭,不管有没有正在处理的请求。

参考文章:

CommandLine | NGINX

pid文件是什么_逍遥避世者的博客-CSDN博客_pid文件

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:48:04  更:2022-09-04 01:49:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:03:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码