NginX日志旋转


9

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

我知道我必须做一些事情才能让NginX在移动旧的日志文件后打开一个新的日志文件。有人可以给我安全旋转nginx日志文件的过程吗?我猜我需要使用logrotate,如何配置它?

系统:

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

Answers:


18

在向Unix守护程序发送挂断信号(SIGHUP)时,它们刷新和/或旋转日志文件已成为一种非正式的半标准。Nginx并不遵循该约定,但是它以USR1相同的方式响应信号,如Nginx网站上标题为Log Rotation所示

因此,您可以尝试类似

kill -s USR1 `pidof nginx`

1
另一种方式,“ pkill -USR1 -n -x nginx”
Palani

11

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滑轨生产日志:

/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
}

我该放在哪个文件中?
EmilStenström'12

如果使用ubuntu,则应将以下代码行放入此文件:中/etc/logrotate.d/nginx。它将生效。
沉思玮申思维

3

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

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

根据logrotate(8)手册页

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.