我知道我的 Linux 安装附带了其中一个服务管理器实现。它可以是 Systemd、Upstart 或任何其他服务管理器实现。
所以,我的问题是如何找出我的 Linux 系统上安装了哪一个?
谢谢。
更新
以下是我的系统中用于搜索 systemd 和 upstart 的一些 ps/grep 命令及其输出:
$ ps aux | grep systemd
root 341 0.0 0.0 52244 3836 ? Ss 15:54 0:00 /lib/systemd/systemd-udevd --daemon
root 588 0.0 0.0 43452 3200 ? Ss 15:54 0:00 /lib/systemd/systemd-logind
root 1889 0.0 0.0 17520 1840 ? S 15:54 0:00 /lib/systemd/systemd-localed
user123 2348 0.0 0.0 15948 2236 pts/1 S+ 15:56 0:00 grep --color=auto systemd
$ ps aux | grep upstart
root 329 0.0 0.0 19744 2308 ? S 15:54 0:00 upstart-udev-bridge --daemon
root 763 0.0 0.0 15808 2168 ? S 15:54 0:00 upstart-file-bridge --daemon
root 770 0.0 0.0 15528 1984 ? S 15:54 0:00 upstart-socket-bridge --daemon
user123 1525 0.0 0.0 22304 2336 ? Ss 15:54 0:00 upstart-event-bridge
user123 1553 0.0 0.0 22368 1828 ? S 15:54 0:00 upstart-dbus-bridge --daemon --session --user --bus-name session
user123 1560 0.0 0.0 30784 280 ? S 15:54 0:00 upstart-file-bridge --daemon --user
user123 1562 0.0 0.0 22312 216 ? S 15:54 0:00 upstart-dbus-bridge --daemon --system --user --bus-name system
user123 2350 0.0 0.0 15948 2280 pts/1 S+ 15:56 0:00 grep --color=auto upstart
答案1
最简单的方法是找出操作系统并查看它默认运行什么。init 系统并不容易改变。
在完全未知的系统上,我建议使用 ps 和 grep 的混合来检查与每个 init 系统相关的常见进程并查看..
我没有使用“经典”初始化脚本系统的系统,所以我无法检查。
在现代的 Fedora 或 Ubuntu 机器上,您可以使用ps aux | grep systemd
,它应该发出类似这样的行usr/lib/systemd/systemd
。它还将配置文件存储在etc/systemd/
您还可以使用 systemctl 来处理服务
在基于 upstart 的系统上,您可以执行ps aux | grep upstart
并找到一些与 upstart 相关的进程。
Upstart 使用服务命令,并将配置文件存储在 /etc/init/ 中,就像经典的 init 文件一样。它使用自己的格式,保存为 .conf 文件 - 尽管其中一些是经典的 init 文件。
您确实经常使用 sysv 样式的 init 脚本和更现代的脚本,但我没有任何系统仅使用 sysv 样式的 init 脚本来检查它们。如果您正在为未知系统编写 init 脚本,这通常是一个安全的选择,尽管您会错过较新的 init 系统添加的亮点。
答案2
在基于 Debian 的 Linux 发行版上:
$ dpkg -S $(which init)
systemd-sysv: /sbin/init
在基于Redhat的Linux发行版上:
$ rpm -qf $(which init)
upstart-0.6.5-16.el6.x86_64
要完成的...