为什么运行服务时没有列出 rsyslog?

为什么运行服务时没有列出 rsyslog?

我正在尝试了解 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它是从命令行“手动”生成的,而不是通过serviceinit.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 继承,

相关内容