默认情况下,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
,并且从系统调用中可能找出配置文件是什么。您可能需要比较合理配置的系统的跟踪输出,以找出在哪里查找配置文件读取。