【发布时间】:2019-01-30 13:06:46
【问题描述】:
我正在使用本地日志文件运行 rsyslogd 8.24.0。
我有一个测试,它运行一个程序,该程序执行一些 syslog 日志记录(我的测试中的条目通过 rsyslog.conf 设置转到另一个文件)然后退出到 shell 脚本以检查日志是否具有预期的内容。这通常有效,但有时会失败,就好像日志记录没有发生一样。在执行检查之前,我已经向 shell 脚本添加了一个刷新(使用 HUP 信号)。我可以看到 HUP 已经发生并且正确的条目在日志中,但是脚本的检查仍然失败。 有没有办法让 shell 脚本等到刷新完成?我可以添加任意睡眠,但希望有更明确的内容。
以下是 shell 脚本的相关部分:
# Set syslog to send dump_hook's logging to a local logfile...
sudo echo "user.* `pwd`/dump_hook_log" >> /etc/rsyslog.conf
sudo systemctl restart rsyslog.service
echo "" > ./dump_hook_log
# run the test program which does syslog logging
kill -HUP `cat /var/run/syslogd.pid` # flush syslog
if [ $? -ne 0 ]
then
logFail "failed to HUP `cat /var/run/syslogd.pid`: $?"
fi
echo "sent HUP to `cat /var/run/syslogd.pid`"
grep <the string I want> ./dump_hook_log >/dev/null
当测试报告失败时,有问题的字符串总是在 dump_hook_log 中,我已经去查看它了。我想它一定是在 grep 的时候刷新还没有完成。
这是一个例子: 在 /var/log/messages 中
2019-01-30T12:13:27.216523+00:00 apx-ont-1 apx_dump_hook[28279]: Failed to open raw dump file "core" (Is a directory)
2019-01-30T12:13:27.216754+00:00 apx-ont-1 rsyslogd: [origin software="rsyslogd" swVersion="8.24.0" x-pid="28185" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
日志文件的修改日期(注意,这早于它包含的条目!):
rw-rw-rw- 1 nealec appexenv1_group 2205 2019-01-30 12:13:27.215053296 +0000 testdir_OPT/dump_hook_log
日志文件的最后一行(这里只有 apx_dump_hook 条目):
2019-01-30T12:13:27.216523+00:00 apx-ont-1 apx_dump_hook[28279]: Failed to open raw dump file "core" (Is a directory)
脚本报错:
Wed 30 Jan 12:13:27 GMT 2019 PSE Test 0.2b FAILED: 'Failed to open raw dump file' not found in ./dump_hook_log
【问题讨论】: