Centos syslog が bash スクリプトからカスタム ファイルにログを記録しない

Centos syslog が bash スクリプトからカスタム ファイルにログを記録しない

Centos リリース 6.5 で syslog を使用してカスタム ログ ファイルにログを記録する bash スクリプトを取得しようとしていますが、常に/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

スクリプトは、syslog に何かを書き込むために logger(1) を呼び出します。したがって、rsyslog は、書き込みを行っているプログラム名が "my_prog_test" ではなく "logger" であると認識します。

達成したいことを実現するには、logger(1) を "-p local0.notice" で呼び出し、rsyslog.conf でプログラム名 "my_prog_test" ではなく機能 "local0" でフィルタリングします。

私のシステム (バックポートからの rsyslog 7.4.4 を搭載した Debian Wheezy) の rsyslog のドキュメントによると、後者は次のように表現されます。

  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 までを使用できます。

関連情報