当我做
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
吗?
只有
systemd
在您的系统中运行,它正在启动所有服务,包括在/etc/init.d
.init
为了与使用传统(也称为“sysvinit”或“System V init”)的旧系统兼容,systemd 实现了一种机制,通过该机制它能够使用传统的 init 脚本启动服务。该兼容层由systemd-sysv-generator实现,它查找遗留的初始化脚本并将它们包装到本机 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
那些不是正在运行的服务,而是可执行脚本。