CentOS-nginx 没有记录日志

写在前面

我发现每次只要日志被压缩一遍之后,nginx 就不会再记录访问和错误日志了。

原因定位

查看/var/log/cron日志,发现在日志被压缩时执行了一个定时任务。

Apr 21 19:10:01 izj6cf5t207ddaqhc1e75vz CROND[1742]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Apr 21 19:15:01 izj6cf5t207ddaqhc1e75vz anacron[1662]: Job `cron.daily' started
Apr 21 19:15:01 izj6cf5t207ddaqhc1e75vz run-parts(/etc/cron.daily)[1746]: starting logrotate
Apr 21 19:15:01 izj6cf5t207ddaqhc1e75vz run-parts(/etc/cron.daily)[1760]: finished logrotate
Apr 21 19:15:01 izj6cf5t207ddaqhc1e75vz run-parts(/etc/cron.daily)[1746]: starting man-db.cron
Apr 21 19:15:01 izj6cf5t207ddaqhc1e75vz run-parts(/etc/cron.daily)[1771]: finished man-db.cron
Apr 21 19:15:01 izj6cf5t207ddaqhc1e75vz anacron[1662]: Job `cron.daily' terminated
Apr 21 19:15:01 izj6cf5t207ddaqhc1e75vz anacron[1662]: Normal exit (1 job run)

查阅资料后发现`logrotate`是一个用来切割压缩日志的工具。主配置文件/etc/logrotate.conf,配置目录/etc/logrotate.d

进入配置目录查看 nginx 的配置

cd /etc/logrotate.d
less nginx

配置如下

/var/log/nginx/*log {
  create 0664 nginx root
  daily
  rotate 10
  missingok
  notifempty
  compress
  sharedscripts
  postrotate
      /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
  endscript
}

发现每次压缩完日志后确实都会重新发送USR1信号给 nginx。

less /etc/nginx/nginx.conf

发现一行pid /usr/local/nginx/logs/nginx.pid;

nginx.pid的路径和/etc/logrotate.d中的路径不一样。

原因就是nginx.pid文件路径不一致导致信号无法发送给 nginx 进程,从而导致没有日志记录。

解决方法

less /etc/logrotate.d

查看postrotatekill命令中nginx.pid的路径。

less /etc/nginx/nginx.conf

寻找一行pid xxxx/nginx.pid

修改这一行保证两个文件内的nginx.pid文件的路径一致。

systemctl restart nginx
本文作者:ADD-SP
本文链接https://www.addesp.com/archives/270
版权声明:本博客所有文章除特别声明外,均默认采用 CC-BY-NC-SA 4.0 许可协议。
暂无评论

发送评论 编辑评论


				
上一篇
下一篇