我正在尝试了解 rsyslog。在我的一台 Linux 机器上,我认为rsyslog
已根据以下输出配置为通过 systemd 运行:
>systemctl status rsyslog
rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled)
Active: active (running) since Tue 2017-01-10 11:28:07 PST; 3 months 19 days ago
Main PID: 954 (rsyslogd)
CGroup: /system.slice/rsyslog.service
L954 /sbin/rsyslogd -n
>ps ax | grep syslog
954 ? Ssl 6:22 /sbin/rsyslogd -n
然而,在另一个 Linux 机器上,systemv(systemctl 不存在)似乎不知道正在rsyslogd
运行:
[root@box ~]# service --status-all | grep -i syslog 2>&1
[root@box ~]# ps ax | grep -i syslog
7866 ? Sl 1:49 /sbin/rsyslogd -n -c5 -i /var/run/syslogd.pid
为什么会出现这样的差距?
在第二个框中,事实是 rsyslogd 正在运行,但没有“发现”service
它是从命令行“手动”生成的,而不是通过service
init.d 脚本之一进行配置的? (抱歉,如果我的术语很原始)。
我真正想要实现的是:在第二个盒子上,我想重新启动 rsyslog,并且我希望通过运行类似service rsyslog restart
.但是当我运行时没有找到 rsyslogservice --status-all
让我走上了这条弯路。
盒子1配置:
>uname -a
Linux box1 3.11.10-301.fc20.x86_64 #1 SMP Thu Dec 5 14:01:17 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
>lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: Fedora
Description: Fedora release 20 (Heisenbug)
Release: 20
Codename: Heisenbug
盒子2配置:
Linux box2 2.6.37+ #2 Tue Apr 18 03:07:09 PDT 2017 armv7l GNU/Linux
答案1
不是来自命令行,但可能来自另一个初始化脚本。在过去糟糕的日子里,像这样的命令
$ sudo bash -c "find / -xdev -type f -print0 -size -1M | xargs -0 grep rsyslog"
或者,更有可能的是
$ sudo bash
# find / -xdev -type f -print0 -size -1M | xargs -0 grep rsyslog
将遍历系统上的所有文件,查找包含所需字符串的纯文件。 find 上的 -mount 选项将其排除在 /proc 之外,现在 grep 足够智能,它会在文件似乎是包含该字符串的二进制文件时进行记录。 -print0 和 xargs 的 -0 选项一起工作,并确保正确处理带有奇数字符、空格的文件,否则可能会混淆解析器。 “-size -1M”确保仅查看 1 MB 或更小的文件 - 大于该大小的文件不太可能是您感兴趣的 - rsyslog 很可能从脚本启动。
当然还有另一种可能,那就是程序是远程启动的。我可以很容易地想象有人从绑定到特定密钥的 ssh 脚本启动 rsyslog,它只做那件事,它甚至可能不会让你获得 shell,这样做的要点是当你应该在机器上运行 syslogd 时接收系统日志就是要获取它们。
像 pstree 这样的命令可以显示什么是子级,并且很容易从父级中退出,以便由 init 继承,