我在同一台服务器上通过 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