谁控制 Linux 服务?

谁控制 Linux 服务?

如何快速找出谁控制着某个 Linux 服务?

我厌倦了在 /etc 中查找 initd、upstart、systemd 或supervisord 是否正在控制某些服务。

答案1

如果您不确定哪个 init,您可以从 猜测ps | grep -E "systemd|upstart"。 (一些闪亮的 systemd 可能存在于传统的新贵系统上,但我认为反之则不然)。您也可以检查supervisord 等。

谷歌搜索 initd 告诉我,/etc/init.d所以我认为这就是你的意思......抱歉,但没有想到检测 sysV init-scripts其他而不是查看 /etc。 (如果你被 sysvinit 困住了,我猜你此外想要/etc/init.d/foo statusservice foo status,以确保您的服务实际上是从 sysvinit 运行的。这不会告诉您该服务是否已不幸运行两个都sysvinit 和supervisord)。

在新贵上,我认为很容易找到工作,因为initctl list显示了 pid。因此,如果它存在,那么它要么是一个新贵作业,要么是在向后兼容性下运行的 sysV 初始化脚本(请参阅上文以检测差异)。

在 systemd 上,您可以使用以下命令检查给定的 pidps的cgroups字段, 见下文。如果 cgroup 表明.service它一定是由 systemd 启动的。如果您不介意寻找一个(可能不明确的)过程姓名相反,systemd-cgls更容易记住。然后我认为systemctl status foo甚至会给你足够的信息来检测 foo.service 的 sysV init-script 。

$ ps xawf -eo pid,user,cgroup,args
  PID USER     CGROUP                              COMMAND
    2 root     -                                   [kthreadd]
    3 root     -                                    \_ [ksoftirqd/0]
[...]
 4281 root     -                                    \_ [flush-8:0]
    1 root     name=systemd:/systemd-1             /sbin/init
  455 root     name=systemd:/systemd-1/sysinit.service /sbin/udevd -d
28188 root     name=systemd:/systemd-1/sysinit.service  \_ /sbin/udevd -d
28191 root     name=systemd:/systemd-1/sysinit.service  \_ /sbin/udevd -d
 1096 dbus     name=systemd:/systemd-1/dbus.service /bin/dbus-daemon --system --address=systemd: --nofork --systemd-activation
[...]

供监督使用supervisord status

相关内容