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