NginX 日志轮换

NginX 日志轮换

我在同一台服务器上通过 NginX 为几个不同的域提供服务,它们各自记录到自己的文件中。我需要设置一个脚本来轮换、压缩这些文件并将其添加到 cron 中。

我知道我必须做一些事情来让 NginX 在移动旧日志文件后打开新日志文件。有人能告诉我安全轮换 nginx 日志文件的步骤吗?我猜我需要使用 logrotate,我该如何配置它?

系统:

  • Ubuntu 9.04 服务器版本。
  • nginx/0.7.61

答案1

这已成为 Unix 守护进程的一种非正式半标准,即当您向它们发送挂断信号 ( SIGHUP) 时,它们会刷新和/或轮换其日志文件。Nginx 并不完全遵循这一惯例,但它以相同的方式响应信号USR1,如 Nginx 网站上的标题所述日志轮换

因此,你可以尝试类似

kill -s USR1 `pidof nginx`

答案2

logrotating nginx 日志:

# nginx SIGUSR1: Re-opens the log files.
/opt/nginx/logs/access.log {
  missingok
  notifempty
  delaycompress
  sharedscripts
  postrotate
    test ! -f /opt/nginx/logs/nginx.pid || kill -USR1 `cat /opt/nginx/logs/nginx.pid`
 endscript 
}

/opt/nginx/logs/error.log {
  missingok
  notifempty
  delaycompress
  sharedscripts
  postrotate  
    test ! -f /opt/nginx/logs/nginx.pid || kill -USR1 `cat /opt/nginx/logs/nginx.pid`
  endscript
}

logrotating rails 生产日志:

/home/app_user/apps/railsapp/log/production.log {
  missingok
  notifempty
  delaycompress
  sharedscripts
  postrotate
    test ! -f /opt/nginx/logs/nginx.pid || kill -USR1 `cat /opt/nginx/logs/nginx.pid`
  endscript
}

答案3

如果您使用 logrotate,请将以下内容(正确位置)添加到 nginx 的 logrotate.conf 部分中:

postrotate
  kill -s USR1 `cat /location/of/nginx.pid`
endscript

根据logrotate(8)手册页

相关内容