当我做
ll /proc/1/exe
我明白了
lrwxrwxrwx. 1 root root 0 Oct 16 11:28 /proc/1/exe -> /usr/lib/systemd/systemd
这意味着我正在运行systemd
守护进程而不是init
。
但当我列出
ll /etc/init.d/
我仍然得到一些正在运行的服务init
(剥离输出),
-rwxr-xr-x 1 root root 2269 Apr 22 2017 acpid*
-rwxr-xr-x 1 root root 5336 Apr 15 2016 alsa-utils*
-rwxr-xr-x 1 root root 2014 Dec 29 2014 anacron*
-rwxr-xr-x 1 root root 4335 Mar 23 2018 apparmor*
-rwxr-xr-x 1 root root 2802 Jan 3 2018 apport*
-rwxr-xr-x 1 root root 2134 Jul 7 2015 autofs*
-rwxr-xr-x 1 root root 2401 Nov 5 2015 avahi-daemon*
-rwxr-xr-x 1 root root 2968 Mar 2 2016 bluetooth*
-rwxr-xr-x 1 root root 1275 Jan 20 2016 bootmisc.sh*
-rwxr-xr-x 1 root root 2125 Apr 27 2016 brltty*
-rwxr-xr-x 1 root root 1904 Nov 18 2015 cgroupfs-mount*
-rwxr-xr-x 1 root root 3807 Jan 20 2016 checkfs.sh*
-rwxr-xr-x 1 root root 1098 Jan 20 2016 checkroot-bootclean.sh*
-rwxr-xr-x 1 root root 9353 Jan 20 2016 checkroot.sh*
-rwxr-xr-x 1 root root 1232 Aug 9 09:32 console-setup.sh*
-rwxr-xr-x 1 root root 3049 Apr 6 2016 cron*
-rwxr-xr-x 1 root root 2804 Mar 28 2018 cups*
-rwxr-xr-x 1 root root 1961 Feb 14 2016 cups-browsed*
-rwxr-xr-x 1 root root 2813 Dec 2 2015 dbus*
-rw-r--r-- 1 root root 1195 Oct 7 06:13 .depend.boot
-rw-r--r-- 1 root root 2459 Oct 7 06:13 .depend.start
-rw-r--r-- 1 root root 1926 Oct 7 06:13 .depend.stop
当我列出更多服务时,
ll /lib/systemd/system
有人可以告诉我为什么有这么多服务在运行吗init
?
答案1
仅systemd
在您的系统中运行,并且正在启动所有服务,包括/etc/init.d
.
为了与使用传统init
(也称为“sysvinit”或“System V init”)的旧系统兼容,systemd 实现了一种机制,通过该机制能够使用传统 init 脚本启动服务。
该兼容层是由systemd-sysv-生成器,它查找旧的 init 脚本并将它们包装到本机 systemd 服务单元中。 (例如,它将找到并为其/etc/init.d/avahi-daemon
创建一个包装器,其中有一个运行的包装器,并且类似地用于停止和重新加载操作,模拟传统初始化脚本的工作方式。)/run/systemd/system/avahi-daemon.service
ExecStart=
/etc/init.d/avahi-daemon start
一些发行版还提供可执行文件的包装器,例如service
和chkconfig
提供与 sysvinit 的进一步兼容性。
为了检查为 systemd 定义了哪些服务,您可以使用诸如systemctl
(显示所有单元文件)、systemctl list-units
(显示内存中的活动单元) 或 之类的命令,您可以在旧版 init 服务之一上使用这些命令,因为它存在于 systemd 中通过包装纸。systemctl status service
答案2
这些不是正在运行的服务,而是可执行脚本。