执行nginx重启命令时,报找不到nginx.pid的解决方法

当nginx被停止(nginx -s stop)或者直接杀掉了进程(kill -9 nginx的进程号)或者意外重启后,调用命令(nginx -s reload 或 nginx -s reopen)会报错:无法找到 "url/local/logs/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 -t -c .url/local/nginx/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就不会报错了。

转载自:https://www.cnblogs.com/happySmily/p/6003579.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
"/usr/local/nginx/logs/nginx.pid" failed 是指在重新读取nginx配置文件,发现无法打开"/usr/local/nginx/logs/nginx.pid"文件,报错信息为"failed (2: No such file or directory)"。这个错误通常是因为nginx进程没有正确启动或者已经退出。 解决方法执行以下命令启动重启nginx: - 启动nginx:/usr/local/nginx/sbin/nginx - 重启nginx:/usr/local/nginx/sbin/nginx -s reload - 退出nginx:/usr/local/nginx/sbin/nginx -s quit 或 /usr/local/nginx/sbin/nginx -s stop 另外,如果执行了退出nginx命令成功退出后,"/usr/local/nginx/logs/nginx.pid"文件会被清除。在重新启动nginx之前,可能会出现找不到pid文件的错误。此执行正常的启动命令即可解决问题[3]。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [nginx出现: [error] open() "/usr/local/nginx/logs/nginx.pid" failed错误](https://blog.csdn.net/weixin_59823583/article/details/126910024)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Nginx重启报错: [error] open() “/usr/local/nginx/logs/nginx.pid“ failed (2: No such file or ...](https://blog.csdn.net/crazestone0614/article/details/126632143)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值