如何检查/etc/logrotate.d/syslog的有效性

如何检查/etc/logrotate.d/syslog的有效性

我们要检查配置文件的有效性 /etc/logrotate.d/syslog

这是因为我们通过 bash 脚本对该文件进行了一些更改

所以我们使用以下方法来检查文件 /etc/logrotate.d/syslog

logrotate  /etc/logrotate.d/syslog

我举个例子

more  /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    size 1024M
    rotate 5
    compress
    dateext
    missingok
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

上面的文件将日志轮转设置为 cron 、 maillog 、 messages 等日志

所以只是为了检查文件错误时的情况,然后我们添加错误的语法:

more  /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    size 1024M
    rotate 5
    compress
    dateext
    missingok
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

bug here syntax <----

所以我将重新运行 cli

 logrotate  /etc/logrotate.d/syslog
error: /etc/logrotate.d/syslog:13 unknown option 'bug' -- ignoring line
 echo $?
0

但正如我们所看到的,std 输出仍然是 0 ,

所以我只想知道检查文件的首选方法是什么 - /etc/logrotate.d/syslog(当我们在 bash 脚本中使用此 cli 时)

答案1

logrotate有一个-d选项,它将列出根据给定的配置文件将采取的所有操作,并标记任何错误,没有实际上执行任何操作(因此不会轮换任何文件)。

配置文件中的错误,是否导致解析问题(例如不平衡的大括号)或不(如您的示例中),都不会导致非零退出代码。您需要error:在输出中查找logrotate- 请注意,这是标准错误,而不是标准输出:

logrotate -d /path/to/configuration |& grep -qv error:

(假设是bash)。

logrotate当遇到运行时问题时返回非零退出代码,例如如果它无法读取需要旋转的文件之一。

相关内容