我们要检查配置文件的有效性 /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
当遇到运行时问题时返回非零退出代码,例如如果它无法读取需要旋转的文件之一。