Centos syslog не записывает данные в пользовательский файл из скрипта bash

Centos syslog не записывает данные в пользовательский файл из скрипта bash

Я пытаюсь заставить bash-скрипт вести журнал в пользовательском файле журнала с помощью syslog на Centos версии 6.5, но он всегда записывает только следующее /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".

Для достижения желаемого результата вызовите logger(1) с опцией «-p local0.notice» и в 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.

Связанный контент