4

我正在使用 4.6.2 版的 rsyslog 并在以下行中包含以下内容/etc/rsyslog.conf

$template InputToScript,"/home/user/%msg%"
if $msg contains "abcdefg" then ^touch;InputToScript

我做了一个PIDkill -1 <pid>在哪里<pid>rsyslogd

然后我输入

logger "xxxabcdefgyyy"

我没有看到/home/user/xxxabcdefgyyy创建的文件。

我遗漏了什么吗?

4

2 回答 2

1

当根据https://github.com/rsyslog/rsyslog/issues/721logrotate截断日志文件时,我看到了这个问题。

原来有一个imfile选项来处理截断——reopenOnTruncate——否则在被截断的文件达到其原始大小之前不会继续记录

例如

input(type="imfile"
      File="/var/log/secure"
      Tag="secure-testing"
      Ruleset="secure_ruleset_testing"
      reopenOnTruncate="on")

您还可以根据https://www.rsyslog.com/how-to-use-debug-on-demand/启用rsyslog 调试输出——

export RSYSLOG_DEBUG="DebugOnDemand NoStdOut"
export RSYSLOG_DEBUGLOG=/somepath/example.log
/etc/rc.d/init.d/rsyslog stop
rsyslogd -n

在单独的会话窗口中运行:

kill -USR1 `cat /var/run/rsyslogd.pid`

(确保 pid 文件存在或使用进程列表获取它)。调试日志将显示在指定的文件中。

于 2018-06-04T21:04:54.500 回答
1

您可能需要说明touchrsyslog 打开子 shell 时的完整路径。所以代码应该是

if $msg contains "abcdefg" then ^/usr/bin/touch;InputToScript

于 2018-12-28T06:54:29.720 回答