logrotate - 在所有处理后运行 postrotate

Cli*_*nis 1 centos syslog logrotate

我有一个 logrotate 脚本,它的结构是旋转 syslog 收集的日志。该脚本的一部分是重新加载系统日志进程。问题是系统日志重新加载针对它轮换的每个匹配日志文件运行,并且大约有 100 个。在处理完所有单个日志后,如何设置 logrotate 脚本以仅重新加载 syslog 进程一次?

/logs/* {
   daily
   rotate 7
   compress
   postrotate
      /etc/init.d/syslog-ng reload 2>/dev/null
   endscript
}
Run Code Online (Sandbox Code Playgroud)

小智 5

使用共享脚本

通常 logrotate 每次轮换日志时都会运行 postrotate 脚本。对于使用相同配置块的多个日志也是如此。例如,同时引用访问日志和错误日志的 Web 服务器配置块,如果它轮换两者,则运行 postrotate 脚本两次(每个文件轮换一次)。如果两个文件都轮换了,则 Web 服务器将重新启动两次。

要防止 logrotate 为每个日志运行该脚本,您可以包含以下命令:

sharedscripts 此命令告诉 logrotate 在运行 postrotate 脚本之前检查该配置块的所有日志。如果轮换日志中的一个或两个,则 postrotate 脚本仅运行一次。如果没有任何日志被轮换,则 postrotate 脚本不会运行。