Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 带预旋转脚本的条件logrotate_Bash_Logrotate - Fatal编程技术网

Bash 带预旋转脚本的条件logrotate

Bash 带预旋转脚本的条件logrotate,bash,logrotate,Bash,Logrotate,我在一个集群中有两个syslog ng服务器(热/冷),它们都映射相同的NFS共享。我希望在syslog服务器上运行logrotate,以旋转存储在NFS共享上的日志。问题是,当前如果两个节点都有/etc/logrotate.d/syslog ng配置,则会导致双重旋转 我想一定有办法在logrotate.d中使用prerotate节来确定是否应该在服务器上进行轮换。换句话说,如果被动节点尝试运行logrotate,则prerotate脚本将首先检查节点是否为主节点。如果它不是主进程,我希望pr

我在一个集群中有两个syslog ng服务器(热/冷),它们都映射相同的NFS共享。我希望在syslog服务器上运行logrotate,以旋转存储在NFS共享上的日志。问题是,当前如果两个节点都有
/etc/logrotate.d/syslog ng
配置,则会导致双重旋转

我想一定有办法在
logrotate.d
中使用
prerotate
节来确定是否应该在服务器上进行轮换。换句话说,如果被动节点尝试运行
logrotate
,则
prerotate
脚本将首先检查节点是否为主节点。如果它不是主进程,我希望
prerotate
脚本在运行之前退出
logrotate
进程


有人能给我指出正确的方向来找出如何使
logrotate prerotate
script
exit
它的父进程
logrotate
进程吗?

看起来好像预旋转脚本只是失败了(返回一个非零值,例如,如果您将/bin/false作为脚本运行或从bash脚本中“exit 1”),那么文件本身就不会旋转。但是,以前的文件(foo.log.1,…)会被旋转。我想这可以被定义为logrotate的bug


因此,如果您还使用dateext(它阻止foo.log.1=>foo.log.2的旋转),您应该已经做好了准备。

在手册页中找到了答案(RTFM,oops!)

我创建了一个
firstaction
bash脚本,如下所示,以检查节点上是否存在loadbalanced IP:

#!/bin/bash

TESTCASE="$(ifconfig | grep 1.2.3.4)"

if [ -z "$TESTCASE" ]; then
        /bin/false
fi
如果返回
false
,则logrotate不会继续

logrotate.d样本:

/var/log/blah/*/*.log {
    firstaction
    /usr/local/bin/amiactive.sh > /dev/null 2>&1
    endscript
    ...
    }

我要试一试。谢谢你的建议
/var/log/blah/*/*.log {
    firstaction
    /usr/local/bin/amiactive.sh > /dev/null 2>&1
    endscript
    ...
    }