Centos syslog 不会从 bash 脚本记录到自定义文件

Centos syslog 不会从 bash 脚本记录到自定义文件

我正在尝试让 bash 脚本使用 Centos 版本 6.5 上的 syslog 记录到自定义日志文件,但它总是只记录到/var/log/messages如下内容:

Jan 12 09:54:47 localhost nbsp: Test message blah!

我做错了什么?为什么没有记录到/var/log/my_prog_test.log?这是我的配置和文件。

/etc/rsyslog.conf(省略大部分文件):

if $programname == 'my_prog_test' then {
   action(type="omfile" file="/var/log/my_prog_test.log")
}

进行更改后,rsyslog.conf我运行了...

$ sudo /etc/rc.d/init.d/rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]

...因此 rsyslog 在配置更改后重新启动。

Bash 脚本/home/nbsp/bin/my_prog_test如下所示:

#!/bin/bash

logger 'Test message blah!'

日志文件列表:

$ ls -la /var/log/ | grep my_prog_test
-rw-------.  1 root root      0 Jan 11 09:23 my_prog_test.log

符号链接...

$ ls -la /usr/bin/my_prog_test
lrwxrwxrwx. 1 root root 29 Jan 12 08:54 /usr/bin/my_prog_test -> /home/nbsp/bin/my_prog_test

该计划的清单:

$ ls -la bin/my_prog_test
-rwxrwxr-x. 1 nbsp nbsp 50 Jan 12 09:09 bin/my_prog_test

答案1

您的脚本正在调用 logger(1) 来将某些内容写入 syslog。因此 rsyslog 将看到程序名称“logger”执行写入操作,而不是“my_prog_test”。

对于您想要实现的功能,请使用“-p local0.notice”调用 logger(1),并在 rsyslog.conf 中通过设施“local0”而不是程序名“my_prog_test”进行过滤。

根据我的系统上 rsyslog 的文档(Debian Wheezy 带有从反向移植的 rsyslog 7.4.4),后者可以表示为:

  if $syslogfacility-text == 'local0' then {
     action(type="omfile" file="/var/log/my_prog_test.log")
  }

这也应该有效,并且对于这种情况来说会更简单:

  local0.* /var/log/my_prog_test.log

如果您的系统上 syslog 设施 local0 已经用于此目的,那么您可以改用 local1 至 local7。

相关内容