O syslog do Centos não está registrando no arquivo personalizado do script bash

1

Estou tentando obter um script bash para logar em um arquivo de log personalizado usando o syslog na versão 6.5 do Centos, mas ele sempre registra em /var/log/messages da seguinte forma:

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

O que estou fazendo de errado? Por que não está registrando em /var/log/my_prog_test.log ? Aqui estão minhas configurações e arquivos.

/etc/rsyslog.conf (a maioria do arquivo foi omitido):

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

Depois de fazer as alterações em rsyslog.conf , corri ...

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

... então o rsyslog foi reiniciado após a mudança de configuração.

O script bash /home/nbsp/bin/my_prog_test tem esta aparência:

#!/bin/bash

logger 'Test message blah!'

A listagem do arquivo de log:

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

O link simbólico ...

$ 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

A listagem do programa:

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

1 resposta

1

Seu script está chamando logger (1) para escrever algo no syslog. Assim, o rsyslog verá o nome do programa "logger" fazendo a escrita e não "my_prog_test".

Para o que você deseja obter o registrador de chamadas (1) com "-p local0.notice" e no filtro rsyslog.conf pelo recurso "local0" em vez do nome do programa "my_prog_test" ..

De acordo com a documentação do rsyslog no meu sistema (Debian Wheezy com rsyslog 7.4.4 de backports), o último seria então expresso como:

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

Isso também deve funcionar e seria mais simples para este caso:

  local0.* /var/log/my_prog_test.log

Se em seu sistema o recurso syslog local0 já é usado para tal propósito, você pode usar local1 até local7.

    
por 12.01.2014 / 21:42