我在群集中有两个syslog-ng服务器(热/冷),两者都映射相同的NFS共享。我想在syslog服务器上运行logrotate来旋转存储在NFS共享上的日志。问题是,如果两个节点都具有/etc/logrotate.d/syslog-ng
配置,则会导致双重旋转。
我认为必须有一种方法可以在prerotate
中使用logrotate.d
节来确定旋转是否应该在服务器上发生。换句话说,如果被动节点尝试运行logrotate
,则prerotate
脚本将首先检查节点是否为主节点。如果它不是主要的,我希望prerotate
脚本在exit
进程运行之前logrotate
。{/ p>
有人能指出我正确的方向,弄清楚如何制作logrotate prerotate
脚本exit
其父logrotate
进程吗?
答案 0 :(得分:1)
看起来好像预旋转脚本只是失败(返回一个非零值,例如,如果你运行/ bin / false作为脚本或从bash脚本中“退出1”),那么文件本身就不会转动。但是以前的文件(foo.log.1,...)确实会被轮换。我想这可以被认定为logrotate的错误。
因此,如果您还使用dateext(这会阻止foo.log.1 => foo.log.2轮换),您应该全部设置。
答案 1 :(得分:1)
在手册页中找到答案(RTFM,哎呀!)
firstaction/endscript
The lines between firstaction and endscript (both of which must
appear on lines by themselves) are executed (using /bin/sh) once
before all log files that match the wildcarded pattern are
rotated, before prerotate script is run and only if at least one
log will actually be rotated. These directives may only appear
inside a log file definition. Whole pattern is passed to the
script as first argument. If the script exits with error, no
further processing is done. See also lastaction.
我创建了一个firstaction
bash脚本,以检查节点上是否存在负载均衡的IP:
#!/bin/bash
TESTCASE="$(ifconfig | grep 1.2.3.4)"
if [ -z "$TESTCASE" ]; then
/bin/false
fi
如果返回false
,则logrotate不会继续。
logrotate.d sample:
/var/log/blah/*/*.log {
firstaction
/usr/local/bin/amiactive.sh > /dev/null 2>&1
endscript
...
}