Nginx logrotate 日志

wil*_*ade 6 server nginx logrotate

我正在运行 Ubuntu 15.04 并运行标准安装nginx( apt-get install nginx)。

一切都运行良好,但我注意到nginx日志正在轮换,但nginx继续输出到同一个日志文件,例如/var/log/nginx/error.log是空的,但/var/log/nginx/error.log.1正在向其中写入内容。

当然,如果我重新启动nginx常规日志文件开始被写入。logrotate脚本中的某个地方是否有错误?是否需要nginx在旋转时重新启动?

Jde*_*eBP 5

您正在运行 Ubuntu 版本 15。

是的,您可以logrotate像其他答案一样使用和使用脚本片段。但是您正在运行 Ubuntu 版本 15。在您的操作系统上,服务在 systemd 下运行,默认情况下,它会捕获其标准错误和 syslog 输出并处理日志记录。首先不需要 nginx 写入该error.log文件。有没有必要logrotate 在所有

其他答案和它们下面的评论可能会让你看看/etc/init.d/nginx。别。该文件无关紧要。 您正在运行 Ubuntu 版本 15。Ubuntu nginx-common 软件包中开箱即用的相关文件/lib/systemd/system/nginx.service就是 systemd 将使用的/etc/init.d/nginx文件,完全忽略了完全被适当的 systemd 服务单元文件覆盖的旧文件。

其他答案也可能会引导您查看/etc/logrotate.d/nginx。您可能会对在那里清楚地看到的内容、尝试rc使用非标准invoke-rc.d子命令运行旧的 System 5脚本与声称没有postrotate节之间的矛盾感到困惑。但同样,根本就不要。首先不要关注这些 logrotate 控制节。 您正在运行 Ubuntu 版本 15,其中包含一个已经具有系统单元且未rc在您的操作系统上使用 System 5脚本的软件包,以及一个记录服务输出的服务管理器。

以 systemd 方式做事的两个步骤:

更合适地配置nginx。

您的nginx服务需要被告知只需将其日志写入其标准错误。作为奖励,您可以通过 syslog 将您的访问日志发送到日志,systemd 也会拦截。

这是通过nginx 全局配置指令和 http 模块指令完成的。具体来说:

  • error_log stderr ;
  • access_log syslog:server=unix:/dev/log ;

你要么nginx.conf这个人一样改变你的文件说这些,要么做 Alexander Kuznecov在这里做的事情并改变你的nginx.service单元文件以在nginx命令行上传递(全局)指令:

类型=分叉
PIDFile=/run/nginx.pid
ExecStart=/usr/bin/nginx -g 'daemon on; error_log 标准错误;master_process on;'

logrotate完全忘记。

systemd 将所有服务的标准输出和标准错误放入其日志中。它处理日志文件本身的轮换。根本不涉及任何信号和 nginx 服务重新加载。您可以阅读日志中与服务相关的最后几个条目(以超级用户或adm用户身份运行)

systemctl 状态 nginx.service
自上次启动以来,您可以从该服务读取日志中的所有内容

journalctl -u nginx.service -b