如果 rsyslog 不是默认的配置文件,我如何找到它?

如果 rsyslog 不是默认的配置文件,我如何找到它?

默认情况下,rsyslog 的配置文件位于 /etc/rsyslog.conf 中。您可以使用 -f /path/to/file 选项在启动时设置配置文件路径。

我的问题是:如果配置文件设置在默认值以外的位置,如何找到它?

答案1

这取决于软件及其配置方式;rsyslogd至少 Centos 7 上的版本在读取配置文件后会关闭它,因此lsof一旦守护进程启动并运行,类似的工具就不会显示该文件:

% sudo lsof -p `pidof rsyslogd` | perl -nle 'print for grep -f, split'
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
/usr/sbin/rsyslogd
...

然而,文件名确实出现在进程表中,然后可以在下面搜索该文件名,/etc因为通常隐藏此类配置:

% < /proc/`pidof rsyslogd`/cmdline tr '\0' ' ' ; echo
/usr/sbin/rsyslogd -n -f /nunca/adivinarás/esto
% sudo grep -r '/nunca/adivinar' /etc
/etc/sysconfig/rsyslog:SYSLOGD_OPTIONS="-f /nunca/adivinarás/esto"

在完全未知的系统上,您可能需要使用类似 SystemTap 或sysdig内核跟踪工具之类的工具,换句话说,并报告守护进程使用的文件:

% sudo sysdig -p '%fd.name' 'proc.name = rsyslogd' | tee files-used
...

然后重新启动守护进程。

如果缺乏内核跟踪工具,人们可以使用诸如strace或 之类的用户空间工具来跟踪有问题的守护进程ktrace,并且从系统调用中可能找出配置文件是什么。您可能需要比较合理配置的系统的跟踪输出,以找出在哪里查找配置文件读取。

相关内容