
Estou tentando fazer com que um script bash faça logon em um arquivo de log personalizado usando o syslog no Centos versão 6.5, mas ele sempre registra assim /var/log/messages
:
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 maior parte do arquivo omitida):
if $programname == 'my_prog_test' then {
action(type="omfile" file="/var/log/my_prog_test.log")
}
Depois de fazer as alterações, rsyslog.conf
executei ...
$ 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 alteração da configuração.
O script bash /home/nbsp/bin/my_prog_test
fica assim:
#!/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
Responder1
Seu script está chamando logger(1) para escrever algo no syslog. Assim, o rsyslog verá o nome do programa "logger" fazendo a gravação e não "my_prog_test".
Para o que você deseja alcançar, chame logger (1) com "-p local0.notice" e em rsyslog.conf filtre 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á for usado para tal propósito, você poderá usar local1 até local7.