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内存碎片问题-(一)

    nginx reload内存碎片问题 相关资料 jemalloc.pmap.redis.systemtap.内存紧缩 问题现象 cache nginx 开启ip 库功能 占用700M 内存,reloa ...

  2. nginx reload热加载实现

    nginx reload热加载实现 1.向master进程发送HUP信号(reload 命令),master进程中的ngx_reconfigure设置1  2.master进程校验配置语法是否正确  ...

  3. NGINX reload过程

    大家好,相信大家对nginx reload过程已经很了解了,今天在对该过程做一个分析.带着如下的问题去看 1.全局数组 ngx_process_t    ngx_processes[NGX_MAX_P ...

  4. Nginx reload的时候出现的问题/usr/local/nginx/logs/nginx.pid

    [root@Frankie-4th nginx]# /usr/local/nginx/sbin/nginx -s reload nginx: [error] invalid PID number &q ...

  5. Nginx reload

    解释 /usr/local/nginx/sbin/nginx -s reload 用过多次这条命令,一直以为是重启Nginx,今天有幸看了下Nginx官方文档介绍这条命令 Nginx服务不会终止,主进 ...

  6. Nginx reload和restart区别

    reload,重新加载的意思,reload会重新加载配置文件,nginx服务不会中断,而且reload时会测试conf语法等,如果出错会rollback用上一次正确配置文件保持正常运行. restar ...

  7. nginx reload命令_nginx:Failed to start nginx.service:unit not found

    错误的原因就是没有添加nginx服务,所以启动失败. 解决方法: 1. 在/root/etc/init.d/目录下新建文件,文件名为nginx 或者用命令在根目录下执行:# vim /etc/init ...

  8. nginx -s reload原理

    我们执行这条命令的原因是希望 nginx 不停止服务始终在处理新的请求的同时把 nginx 的配置文件平滑的把旧的 nginx.conf 配置更新为新的 nginx.conf 配置. 这样一个功能对于 ...

  9. Nginx使用service nginx sart/stop/restart/reload 命令的脚本方法

    前言: 使用文章中的脚本,前提是nginx已经安装,且安装目录为/usr/local/nginx/中 切换目录: cd /etc/init.d/ 使用vim nginx 编辑内容如下: #!/bin/ ...

最新文章

  1. 【C语言】数组指针与指针数组的区分与应用
  2. 单目图像深度估计 - 泛化篇:S2R-DepthNet
  3. 华为自研操作系统官宣了,但有机会成功吗
  4. ROM、RAM、IROM、IRAM、DRAM、SRAM、Flash介绍
  5. java虚拟机类加载机制浅谈_浅谈Java虚拟机(三)之类加载机制
  6. python 链表操作 优化_python---单链表的常用操作
  7. AppFabric客户端的一些配置(Microsoft.Web.DistributedCache)
  8. 阿帕奇apache服务器和webDav服务器快速配置。
  9. FLINK任务重启 Streaming File Sink落地hdfs的中间状态In-progress格式文件处理方案
  10. php 插件推荐,Typecho实用插件推荐(一)
  11. 效率最高的两种项目沟通方式
  12. 一个屌丝程序猿的人生(八十八)
  13. intellij 取消svn 用户名 密码
  14. Z04 - 999、Flink与电商指标分析
  15. autograd-自动求导系统
  16. 微信小程序日期午别排班表
  17. win7 VMware 安装CentOs7实战
  18. Excel导入导出之easypoi工具之模板复杂表格导出
  19. java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.exc.InvalidDefinitionException解决方法
  20. dj版python_【Python爬虫】笔者想听DJ,结果写了一个DJ嗨嗨网的下载工具。

热门文章

  1. 一文搞懂【EV-TPM】设备管理系统的功能和意义
  2. POJ 3349 Snowflake Snow Snowflakes hash
  3. 微信收到消息很慢无法连接服务器,微信接收消息有延迟原因及解决办法
  4. struts logic:iterate标签用法
  5. 重磅!中国新型类脑计算芯片首登《自然》封面
  6. java程序添加背景音乐
  7. 如何用副业搞垮一个打工人?
  8. jquery删除cookie的办法
  9. 高中生写LOL外挂1年狂赚500万,落网前刚买下120万保时捷...
  10. 公司招聘:33岁以上的和两年一跳的不要,开出工资我还以为看错了...