nginx重启报找不到nginx.pid的解决方法

nginx重启报找不到nginx.pid的解决方法

nginx被停止(nginx -s stop)或者直接杀掉了进程(kill -9 nginx的进程号)后,调用命令(nginx -s reload 或者 nginx -s reopen)会报错:无法找到 “var/run/nginx.pid”文件。

这句话中,有好几个知识点,也包含了一些错误,错误得把reload或者reopen当做了启动的命令。来依次总结一下:

1.nginx的常用命令

停止:

  • 直接杀nginx进程。  ps aux|grep nginx 查看nginx的主进程号, 调用 kill -9 nginx的进程号 来强制停止nginx。(还有 ”kill -quit nginx的进程号” 来从容停止nginx,  ”kill -term nginx的进程号”来快速的停止nginx)
  • 调用 nginx -s stop 快速停止nginx
  • 调用 nginx -s quit 完整有序的停止nginx

启动: 

进入nginx安装目录/sbin/下执行

nginx  或者  nginx -c 特定位置的nginx.conf (一般默认是 nginx -c ./logs/nginx.conf)

重启:

nginx -s reload 平滑的重启。配置重载。

nginx工作中,包括一个master进程,多个worker进程。worker进程负责具体的http等相关工作,master进程主要是进行控制等控制。 

nginx -s  reload 命令加载修改后的配置文件,命令下达后发生如下事件

1. Nginx的master进程检查配置文件的正确性,若是错误则返回错误信息,nginx继续采用原配置文件进行工作(因为worker未受到影响)

2. Nginx启动新的worker进程,采用新的配置文件

3. Nginx将新的请求分配新的worker进程

4. Nginx等待以前的worker进程的全部请求已经都返回后,关闭相关worker进程

5. 重复上面过程,知道全部旧的worker进程都被关闭掉。

所以,重启之后,master的进程号不变,worker的进程号会改变。

日志分割:   

nginx -s reopen  重新打开日志文件。

为什么要切割日志?一般Nginx安装好后有些人会打开日志记录,有些人会关闭日志记录,打开日志记录的人一般都会把架设在Nginx上的所有网站日志都存在同一个文件里(比如我存在access.log日志文件里),

这样日积月累所有网站的访问记录就会把日志文件越积越大,当需要查看日志文件的时候一看就是一大串,不方便查找。现在,如果我把每天的日志文件分割开来用相应的日期标识出来这样就大大方便查找了。

我是建议打开日志记录,日志记录里面存放着很多有用的东西。比如:浏览器名称,可以方便你对网站的排版做出调整;IP地址,如果网站收到攻击,你就可以查到那个IP地址。

Linux下我们可以简单的把日志文件mv走,但是你会发现mv走后新的日志文件没有重新生成,一般linux下用的文件句柄,文件被打开情况下你mv走文件,但是原来操作这个文件的进程还是有这个文件的inode等信息,

原进程还是读写原来的文件,因此简单的mv是无法生效的。

因此建议过程如下

1. mv原文件到新文件目录中,这个时候 nginx还写这个文件(写入新位置文件中了)

2. 调用nginx -s  reopen用来打开日志文件,这样nginx会把新日志信息写入这个新的文件中

这样完成了日志的切割工作, 同时切割过程中没有日志的丢失。

测试当前配置文件是否正确: nginx -t

测试指定配置文件是否正确: nginx -t 指定配置文件路径

2.var/run/nginx.pid文件

首先 var/run这个目录是干嘛用的?

此文件夹包含描述系统启动以来系统信息的数据。此文件夹下的文件必须在启动过程初期清除(删除或归零)。程序可以在/var/run下有自己的子文件夹。原先放在/etc下的进程标识(PID)文件必须放

/var/run里面。PID文件的命名惯例是.pid。所以,nginx的PID文件名为/var/run/nginx.pid

nginx.pid存放的是nginx的master进程的进程号。

3.为什么会报错

nginx被停止时,var/run/nginx.pid被删除了。  而 reopen和 reload命令需要通过nginx.pid获取进程号,会去找var/run.nginx.pid ,如果不存在,就报错了。

4.总结

reopen是在nginx启动的情况给做分割日志用的,  reload也是在nginx启动的情况下做平滑重启的,他们都依赖于nginx进程存在的情况下。 并不是字面上启动或打开的意思。

真正的启动命令是:  nginx 或者 nginx -c 指定目录的配置文件 nginx.conf。  查看进程存在即表明启动成功,之后再调用reload和reopen就不会报错了。

 

 

参考链接:http://www.cnblogs.com/happySmily/p/6003579.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/113924.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • c语言gdi绘图_程序设计的基本步骤是

    c语言gdi绘图_程序设计的基本步骤是本文将实现对基本图形的绘制:windows程序画图,大体上有3种方法:(1)你告诉系统点的坐标和颜色,系统通过SetPixel来画。类似的,通过GetPixel来获取某一点像素值。(2)使用MoveToEx、LineTo来划线,MoveToEx设置起点坐标,LineTo设置终点坐标,或者使用Polyline函数,这个函数接受一个POINT类型的数组,通过数组里的点连线。(3)windows…

  • 数论题中(杜教筛)交换求和符号

    数论题中(杜教筛)交换求和符号文章目录方阵下三角约数倍数狄利克雷卷积以及杜教筛学习笔记突然对交换求和符号有了新的理解了,用矩阵转置的思路就很好理解,外层循环相当于枚举行,内层枚举列,交换次序就是先枚举列,再枚举行方阵正常的就是∑i=1n∑j=1nf(i,j)=∑j=1n∑i=1nf(i,j)\sum_{i=1}^n\sum_{j=1}^nf(i,j)=\sum_{j=1}^n\sum_{i=1}^nf(i,j)…

    2022年10月12日
  • Tomcat闪退问题

    Tomcat闪退问题这两天快被这些搞的头大了,tomcat重配了几次,老出现闪退的问题(直接下的tomcat8.0压缩包免安装),总结下来有三个方面,大家如果也遇到这个问题,可以试试下面三个办法:1.网上帖子基本上说出现这个问题最大的原因是因为环境变量没有配对,大家可以参见下面这个帖子比对一下:http://blog.csdn.net/wsad_hjk/article/details/27374753我这里jdk8….

  • 几种常见GC算法介绍「建议收藏」

    几种常见GC算法介绍「建议收藏」本文主要是对常用的GC算法(引用计数法、标记-清除法、复制算法、标记-清除算法)作出相关的说明,并对相关知识做简单的介绍。一、什么是堆?    堆指用于动态(即执行程序时)存放对象的内存空间。而这个对象,在面向对象的编程中,它指“具有属性和行为的事物”,然而在GC的世界中,对象表示的是“通过应用程序利用的数据的集合”。具体到Java堆,它是所有线程共享的一块内存区域,在虚拟机启动时创…

  • 第五章:redis持久化,包括rdb和aof两种方式[通俗易懂]

    第五章:redis持久化,包括rdb和aof两种方式[通俗易懂]第五章:redis持久化,包括rdb和aof两种方式

  • 基于Java (spring-boot)和微信小程序的校园闲置二手小程序交易商城(毕业设计优秀论文)「建议收藏」

    基于Java (spring-boot)和微信小程序的校园闲置二手小程序交易商城(毕业设计优秀论文)「建议收藏」1.总体功能图1用户端(1)用户信息模块用户注册登录、个人信息维护(2)闲置信息模块闲置信息的发布、查询(3)留言模块实时留言功能(4)关注用户实时了解关注用户动态2管理端(1)用户端功能(2)用户信息管理用户信息管理(3)发布信息管理发布信息管理(4)数据统计模块统计系统信息及交易信…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号