nginx nginx.pid无故文件丢失,日志无法正常轮转

nginx.pid文件丢失,日志无法正常轮转。解决方法:
故障原因,日志被迁移后,kill-USR1 pid 没有成功,致使nginx写的文件句柄还是在旧的文件里。

模拟故障:
1: 我们 mv 日志文件为.bak
2: 我们清空nginx.pid文件
3: 我们试图reload的时候失败,因为pid文件是空的。这时候我们使用killall nginx ,然后再启动nginx才能解决。

[[email protected] nginx]# ps -ef |grep nginx

root     10287    1  0 10:18 ?        00:00:00 nginx: master process/usr/sbin/nginx -c /etc/nginx/nginx.conf

nobody   10290 10287 0 10:18 ?        00:00:00 nginx:worker process

nobody   10291 10287 0 10:18 ?        00:00:00 nginx:worker process

nobody   10292 10287 0 10:18 ?        00:00:00 nginx:worker process

nobody   10295 10287 0 10:18 ?        00:00:00 nginx:worker process

nobody   10296 10287 0 10:18 ?        00:00:00 nginx:worker process

nobody   10297 10287 0 10:18 ?        00:00:00 nginx:worker process

nobody   10298 10287 0 10:18 ?        00:00:00 nginx:worker process

nobody   10299 10287 0 10:18 ?        00:00:00 nginx:worker process

nobody   10300 10287 0 10:18 ?        00:00:00 nginx:worker process

nobody   10301 10287 0 10:18 ?        00:00:00 nginx:worker process

nobody   10304 10287 0 10:18 ?        00:00:00 nginx:worker process

nobody   10306 10287 0 10:18 ?        00:00:00 nginx:worker process

nobody   10307 10287 0 10:18 ?        00:00:00 nginx:worker process

nobody   10308 10287 0 10:18 ?        00:00:00 nginx:worker process

nobody   10310 10287 0 10:18 ?        00:00:00 nginx:worker process

nobody   10311 10287 0 10:18 ?        00:00:00 nginx:worker process

root     10713 10080  0 10:24 pts/0    00:00:00 grep --color=auto nginx

[[email protected] nginx]# less/var/run/nginx.pid

10287

[[email protected] nginx]# pwd

/etc/nginx

[[email protected] nginx]# mv/data/logs/access.log /data/logs/access.log.bak

[[email protected] nginx]# cd/data/logs/

[[email protected] logs]# ls

access.log.bak  error.log nginx_access.log nginx_error.log  nginxlog.sh

[[email protected] logs]# echo "" > /var/run/nginx.pid

[[email protected] logs]#/etc/init.d/nginx reload

Reloading nginx:                                          [FAILED]

平滑解决方法:
1:平滑生成日志,不需要重启。我们发现access.log已经存在。

2:但pid文件还是空的,所以nginx reload是失败的。
3:我们将pid号覆盖掉/var/run/nginx.pid
4:nginx reload 成功,此过程不涉及到任何重启nginx情况,实现0请求丢失。

[[email protected] logs]# ps -ef |grep nginx | grep root | grep -v grep | awk ‘{print $2}‘|xargs -i kill -USR1{}

[[email protected] logs]# ls

access.log  access.log.bak  error.log nginx_access.log  nginx_error.log  nginxlog.sh

[[email protected] logs]#/etc/init.d/nginx reload

Reloading nginx:                                          [FAILED]

[[email protected] logs]# ps -ef |grep nginx | grep root | grep -v grep | awk ‘{print $2}‘ |xargs -i echo {} >/var/run/nginx.pid

[[email protected] logs]#/etc/init.d/nginx reload

Reloading nginx:                                          [  OK  ]

解决方法对比:

第一种方法,即killallnginx方法解决,然后启动。

1:如果只有单台nginx,会有请求丢失的情况。

2:因为是硬重启,无法启动的可能性。

第二种方法,平滑重启不会丢失任何清理,且不存在任何危险,可以放入脚本中执行。

时间: 2024-07-29 12:24:34

nginx nginx.pid无故文件丢失,日志无法正常轮转的相关文章

nginx不记录指定文件类型日志

1.vim 主配置文件: vim /usr/local/nginx/conf/nginx.conf 自定义日志名称: 2.vim /usr/local/nginx/conf/vhosts/jz.conf     ---编辑虚拟主机文件 加入:      access_log /tmp/access.log xrc;      ----定义日志位置和名称 加入: location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$         ---过滤文件 { access_

LNMP - Nginx不记录指定文件类型日志

用户请求一个页面,日志除了会记录页面的URL以外,页面里的静态文件的URL同样也会被加载,从而被记录到访问日志里去,这个日志量是很大的,会妨碍我们分析日志,因为其实我们只是想看看用户访问的页面的URL,而不是页面里面的静态文件. 1. 定义日志格式:vim /usr/local/nginx/conf/nginx.conf log_format test '$remote_addr $http_x_forwarded_for [$time_local]' '$host "$request_uri&

Nginx按天分割轮询日志文件

使用linux系统自带的日志轮询工具logrotate logrotate 介绍 ------------------------------------- logrotate 程序是一个日志文件管理工具.用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做"转储".我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过cron 程序来执行. logrotate 程序还可以用于压缩日志文件,以及发送日志到指定的E-mail . logrotate 的配置文件是/etc

Nginx(三)-- 配置文件之日志管理

1.日志文件的默认存放位置 默认的日志文件存放位置在:nginx/logs/ 文件夹下,logs文件夹下有:access.log   error.log   nginx.pid 文件 2.nginx.conf 中的日志 配置 nginx.conf中是将日志文件的配置注释掉的,如下: #access_log  logs/host.access.log  main; 日志声明     路径及文件名     日志标识 $remote_addr 与$http_x_forwarded_for 用以记录客户

nginx实操(2)配置文件&内核&日志说明

优化内核参数 cat /etc/sysctl.conf net.ipv4.ip_forward = 0 表示开启路由功能,0是关闭,1是开启 net.ipv4.conf.default.rp_filter = 1 开启反向路径过滤 net.ipv4.conf.default.accept_source_route = 0 处理无源路由的包 net.ipv4.tcp_max_tw_buckets = 6000 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT

Nginx服务优化(四)日志分割

Nginx的日志切割 随着Nginx运行时间增加,日志也会增加.为了方便掌握Nginx运行状态,需要时刻关注Nginx日志文件,太大的日志文件对监控是一个大灾难,所以需要定期进行日志文件的切割.Nginx自身不具备日志分割处理的功能,但可以通过Nginx信号控制功能的脚本实现日志的自动切割,并通过Linux的计划任务周期性地进行日志切割. 1.在"/usr/local/nginx"目录下,添加一个日志分割脚本 [[email protected] nginx]# vim fenge.s

【恢复】Redo日志文件丢失的恢复

第一章 Redo文件丢失的恢复 1.1  online redolog file 丢失 联机Redo日志是Oracle数据库中比较核心的文件,当Redo日志文件异常之后,数据库就无法正常启动,而且有丢失据的风险,强烈建议在条件允许的情况下,对Redo日志进行多路镜像.需要注意的是,RMAN不能备份联机Redo日志文件.所以,联机Redo日志一旦出现故障,则只能进行清除日志了.清除日志文件即表明可以重用该文件. 1.1.1  数据库归档/非归档模式下inactive redo异常ORA-00316

nginx: [error] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)

在重启nginx服务的时候,出现了这个错误. [[email protected] etc]# nginx -c /var/run/nginx/nginx.pid nginx: [emerg] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory) 解决办法: [[email protected] etc]# nginx -c /etc/nginx/nginx.conf 其他的一些解决办法: 1.进

解决nginx无法下载大文件,解决open()failed 问题

解决open()failed (13: Permission denied) while reading upstream的问题前言: [[email protected] nginx]# ps -ef|grep nginx root 1686 1 0 2018 ? 00:00:00 nginx: master process /xxdata/nginx/sbin/nginx nginx 5443 5442 0 2018 ? 00:00:33 php-fpm: pool www nginx 54