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

nginx重启报找不到nginx.pid的解决方法的更多相关文章

  1. Nginx启动提示找不到libpcre.so.1解决方法

    如果是32位系统 [root@lee ~]#  ln -s /usr/local/lib/libpcre.so.1 /lib 如果是64位系统 [root@lee ~]#  ln -s /usr/lo ...

  2. nginx 启动报错“var/run/nginx/nginx.pid" no such file or directory

    nginx 启动报错“var/run/nginx/nginx.pid" no such file or directory 今天刚搭建的nginx服务器启动时,报错“var/run/ngin ...

  3. nginx 出现413 Request Entity Too Large问题的解决方法

    nginx 出现413 Request Entity Too Large问题的解决方法 使用php上传图片(大小1.9M),出现 nginx: 413 Request Entity Too Large ...

  4. linux下svn客户端报错Cannot negotiate authentication mechanism的解决方法

    svn客户端报错Cannot negotiate authentication mechanism的解决方法: 问题出现的原因之一: 因为SVN服务器配置了saslauthd服务用来实现与ldap的对 ...

  5. win7系统下重启之后打印机服务就会自动停止的解决方法

    win7系统下重启之后打印机服务就会自动停止的解决方法: 第一步.进入Win7系统后,您需要启动win7系统的任务管理器窗口,然后切换到进程这一栏中,将spoolsv.exe运行进程结束掉.之后,您同 ...

  6. ubuntu16 升级后找不到 eth0 网卡 的解决方法

    ubuntu16 升级后找不到 eth0 网卡 的解决方法 今天在VPS上一时手痒,执行了升级命令 apt-get update 更新软件包索引,源 apt-get upgrade 更新软件包 apt ...

  7. shell报错:-bash: [: ==: 期待一元表达式 解决方法 ([: ==: unary operator expected)

    shell报错:-bash: [: ==: 期待一元表达式 解决方法 ([: ==: unary operator expected) blogdaren 2015-02-26  抢沙发 14916人 ...

  8. Ubuntu中找不到pip3命令的解决方法

    Ubuntu中找不到pip3命令的解决方法 Ubuntu 有 python2 和 python3. 今天使用 Ubuntu 中的 python3 时,想要安装第三方库却发现 pip 指向的是 pyth ...

  9. 安装PHP过程中,make步骤报错:(集合网络上各种解决方法)

    安装PHP过程中,make步骤报错:(集合网络上各种解决方法) (1)-liconv -o sapi/fpm/php-fpm /usr/bin/ld: cannot find -liconv coll ...

随机推荐

  1. [转]Android sharedpreferences使用

    1.    SharedPerferences保存的数据主要是类似配置信息格式的数据,因此它保存的数据主要是简单类型的key-value对,SharedPreferences本身并没有写入数据的能力, ...

  2. 浅谈JavaScript的面向对象程序设计(一)

    面向对象的语言有一个标志,他们都有类的概念,通过类可以创建多个具有相同属性和方法的对象.但是JavaScript中没有类的概念,因此JavaScript与其他的面向对象语言还是有一定区别的.JavaS ...

  3. JavaScript 内存相关知识

    一.内存基本概念 1.1.生命周期 不管什么程序语言,内存生命周期基本是一致的: 分配你所需要的内存 var n = 123; // 给数值变量分配内存 var s = "azerty&qu ...

  4. Python day 6(3) Python 函数式编程1

    一:函数式编程概念 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的 ...

  5. 学习整理与细化(1)——Internet 的域名系统(domain name system)

    2015-09-20 整理人:承蒙时光 如有错误欢迎指教O(∩_∩)O谢谢 1.作用:提供主机符号符名与IP地址之间转换服务也称域名服务: 2..域名系统的层次型结构命名机制(服务器地址): 计算机名 ...

  6. HTTP结构

    HTTP结构 转载请注明出处:HTTP结构简介 HTTP通信过程包括从客户端发往服务器的请求和服务器返回客户端的响应,这篇文章就简单的了解一下HTTP请求和响应的结构与协议本身的状态管理. 用户HTT ...

  7. Js相关用法个人总结

    Js相关用法个人总结  js中将数组元素添加到对象中var obj = {}; var pushArr = [11,22,33,44,55,66]; for(var i=0;i<pushArr. ...

  8. 初学Python之 布尔类型

    与运算:只有两个布尔值都为 True 时,计算结果才为 True. True and True # ==> True True and False # ==> False False an ...

  9. git for windows上传项目到github

    软件:git for windows 账户:github账户 1.第一步创建自己的github账号,并创建自己的project,创建完毕之后url如下 https://github.com/ft110 ...

  10. css 两端对齐的多种实现方式

    http://www.cnblogs.com/PeunZhang/p/3289493.html