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文件的命名惯例是<program-name>.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就不会报错了。

nginx: [error] open() “/usr/local/nginx/logs/nginx.pid” failed (2: No such file or directory) 
[root@VM_16_6_centos sbin]# ./nginx -c /usr/local/nginx/conf/nginx.conf

nginx reload和reopen的更多相关文章

  1. Nginx 假如reload或reopen时发生错误如何解决

    配置Nginx 如果reload 或 quit发生不存在文件的时候 重新编译下即可  ./nginx -c /usr/local/webserver/nginx/conf/nginx.conf //重 ...

  2. nginx reload

    iwangzheng.com Usage: nginx [-?hvVt] [-s signal] [-c filename] [-p prefix] [-g directives] Options:- ...

  3. nginx reload的原理

    nginx启动时,会启动两个进程: 一个是Master进程和worker进程.改变配置后nginx做的事1)改变了nginx配置之后,HUP signal的信号需要发送给主进程.2)主进程首先会检测新 ...

  4. 解决nginx reload失败

    1. 失败提示信息 nginx: [error] open() : No such file or directory) 2. 解决方法 /usr/local/nginx/sbin/nginx -c ...

  5. NGINX宏观手记(变量|配置)

    前言 任何一个工具都有它的灵魂所在,作为一个PHP程序员,我们可能仅仅使用了它的一小部分,这篇文章让你更加了解Nginx,本章大多都是总结.翻译.整理 ,希望你可以知道nginx不仅仅是PHP的附属品 ...

  6. [转] NGINX宏观手记

    前言 任何一个工具都有它的灵魂所在,作为一个PHP程序员,我们可能仅仅使用了它的一小部分,这篇文章让你更加了解Nginx,本章大多都是总结.翻译.整理 ,希望你可以知道nginx不仅仅是PHP的附属品 ...

  7. nginx添加系统服务(start|stop|restart|reload)

    nginx添加系统服务 1.编写脚本,名为nginx #vim /etc/init.d/nginx #!/bin/bash#chkconfig: - 99 20 #description: Nginx ...

  8. 充分利用nginx的reload功能平滑的上架和更新业务

    以前更新我们都要停服务更新,不管什么时候更新,都可能有客户在访问,体验不好,二是如果有数据传输,可能会造成数据丢失. nginx reload可以不间断更新配置文件,原理就是当我们修改配置文件发起re ...

  9. windows下nginx的启动关闭

    Windows下Nginx的启动.停止等命令 在Windows下使用Nginx,我们需要掌握一些基本的操作命令,比如:启动.停止Nginx服务,重新载入Nginx等,下面我就进行一些简单的介绍. .启 ...

随机推荐

  1. 【WEB基础】HTML & CSS 基础入门(2)选取工具:VS2019安装使用

    前面 子曰“工欲善其事,必先利其器”.开始编写HTML代码前,我们该选择一款编辑工具,实际上,HTML作为标记语言,我们甚至可以直接用记事本来编写HTML代码,但记事本实在弱爆了.这里推荐使用Visu ...

  2. vector-空间增长

    使用 vector 的时候,一般是从一个空 vector 开始,根据需要逐步填充数据. 这里的关键惭怍是 push_back(),它将一个新元素添加到 vector 中,该元素成为 vector 的最 ...

  3. C#与.net 入门

    C# 语言和 .NET Framework 介绍 https://docs.microsoft.com/zh-cn/dotnet/csharp/getting-started/introduction ...

  4. js 获取 对象 属性名称(转载)

    来源:https://www.cnblogs.com/YuyuanNo1/p/9257634.html dataObj = {name : su,age : 26,height : 18cm }; f ...

  5. sql server快捷键添加

    工具--选项--键盘 sp_table_column_info p_helpindex sp_sql

  6. MySQL MGR--数据同步原理

    MGR复制架构 在MySQL 5.7.17版本正式推出组复制(MySQL Group Repliation MGR),用来解决异步复制和半同步复制可能产生数据不一致的问题,组复制依靠分布式一致性协议( ...

  7. MYSQL5.7生成列简介及创建

    1.说明 生成列是由已存在的字段通过表达式计算得来的 2.生成列类型 VIRTUAL,即虚拟类型,字段值不实际存储,当读取行时再计算,虚拟列类型不占存储 STORED,即存储类型,字段值会实际存储起来 ...

  8. UBOOT2016.05 看门狗

    硬件平台 AM335X UBOOT  2016.05 在UBOOT中关看门狗,需要修改屏蔽这两处代码 init_sequence_r->board_init->hw_watchdog_in ...

  9. 树莓派安装系统+ssh登录

    一.准备工作: (1)树莓派3b (2)官网下载系统 (3)SD卡 (4)网线 (5)SDFormatter.exe (6)win32diskimager.exe (7)putty (7)笔记本 二. ...

  10. k8s部署etcd集群

    1.k8s部署高可用etcd集群时遇到了一些麻烦,这个是自己其中一个etcd的配置文件 例如: [Unit] Description=Etcd Server After=network.target ...