Centos Syslog führt keine Protokollierung in einer benutzerdefinierten Datei aus einem Bash-Skript durch

Centos Syslog führt keine Protokollierung in einer benutzerdefinierten Datei aus einem Bash-Skript durch

Ich versuche, ein Bash-Skript dazu zu bringen, mit Syslog unter Centos Version 6.5 in eine benutzerdefinierte Protokolldatei zu protokollieren, aber die Protokollierung erfolgt immer nur wie /var/log/messagesfolgt:

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

Was mache ich falsch? Warum erfolgt keine Anmeldung bei /var/log/my_prog_test.log? Hier sind meine Konfigurationen und Dateien.

/etc/rsyslog.conf(der größte Teil der Datei ausgelassen):

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

Nachdem ich die Änderungen vorgenommen hatte, rsyslog.confhabe ich Folgendes ausgeführt ...

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

... also wurde rsyslog nach der Konfigurationsänderung neu gestartet.

Das Bash-Skript /home/nbsp/bin/my_prog_testsieht folgendermaßen aus:

#!/bin/bash

logger 'Test message blah!'

Die Protokolldateiliste:

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

Der symbolische Link...

$ 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

Die Programmliste:

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

Antwort1

Ihr Skript ruft logger(1) auf, um etwas in syslog zu schreiben. Daher sieht rsyslog, dass das Programm mit dem Namen „logger“ den Schreibvorgang ausführt und nicht „my_prog_test“.

Rufen Sie dazu logger(1) mit "-p local0.notice" auf und filtern Sie in rsyslog.conf nach der Einrichtung "local0" anstelle des Programmnamens "my_prog_test".

Laut der Dokumentation für rsyslog auf meinem System (Debian Wheezy mit rsyslog 7.4.4 von Backports) würde letzteres dann wie folgt ausgedrückt werden:

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

Das hier sollte auch funktionieren und wäre in diesem Fall einfacher:

  local0.* /var/log/my_prog_test.log

Wenn auf Ihrem System die Syslog-Funktion local0 bereits für einen solchen Zweck verwendet wird, können Sie stattdessen local1 bis local7 verwenden.

verwandte Informationen