Linux systemd启动流程

以Ubuntu 18.04.2 LTS为例,列出Systemd启动target中涉及单元(Unit).

 default.target (= graphical.target by default)

graphical.target
	Requires=multi-user.target
	Wants=display-manager.service
	Conflicts=rescue.service rescue.target
	After=multi-user.target rescue.service rescue.target display-manager.service
	AllowIsolate=yes

# ls -l /etc/systemd/system/display-manager.service
lrwxrwxrwx 1 root root 32 6月   3  2019 /etc/systemd/system/display-manager.service -> /lib/systemd/system/gdm3.service
	
	[Unit]
	After=getty@tty1.service
	After=rc-local.service plymouth-start.service systemd-user-sessions.service
	OnFailure=plymouth-quit.service
	[Service]
	ExecStartPre=/usr/share/gdm/generate-config
	ExecStart=/usr/sbin/gdm3
	
# ls -l /lib/systemd/system/graphical.target.wants/
lrwxrwxrwx 1 root root 39 6月   3  2019 systemd-update-utmp-runlevel.service -> ../systemd-update-utmp-runlevel.service
	
	[Unit]
	Requisite=systemd-update-utmp.service
	After=systemd-update-utmp.service
	After=runlevel1.target runlevel2.target runlevel3.target runlevel4.target runlevel5.target
	Before=shutdown.target
	[Service]
	ExecStart=/lib/systemd/systemd-update-utmp runlevel
	
# ls -l /etc/systemd/system/graphical.target.wants/
lrwxrwxrwx 1 root root 43 6月   3  2019 accounts-daemon.service -> /lib/systemd/system/accounts-daemon.service
lrwxrwxrwx 1 root root 35 6月   3  2019 udisks2.service -> /lib/systemd/system/udisks2.service

 Multi-user.target

Multi-user.target
	[Unit]
	Description=Multi-User System
	Documentation=man:systemd.special(7)
	Requires=basic.target
	Conflicts=rescue.service rescue.target
	After=basic.target rescue.service rescue.target
	AllowIsolate=yes
	
# ls -l /lib/systemd/system/multi-user.target.wants/
lrwxrwxrwx 1 root root 15 6月   3  2019 dbus.service -> ../dbus.service
lrwxrwxrwx 1 root root 15 6月   3  2019 getty.target -> ../getty.target
lrwxrwxrwx 1 root root 24 6月   3  2019 plymouth-quit.service -> ../plymouth-quit.service
lrwxrwxrwx 1 root root 29 6月   3  2019 plymouth-quit-wait.service -> ../plymouth-quit-wait.service
lrwxrwxrwx 1 root root 33 6月   3  2019 systemd-ask-password-wall.path -> ../systemd-ask-password-wall.path
lrwxrwxrwx 1 root root 25 6月   3  2019 systemd-logind.service -> ../systemd-logind.service
lrwxrwxrwx 1 root root 39 6月   3  2019 systemd-update-utmp-runlevel.service -> ../systemd-update-utmp-runlevel.service
lrwxrwxrwx 1 root root 32 6月   3  2019 systemd-user-sessions.service -> ../systemd-user-sessions.service

	
# ls -l /etc/systemd/system/multi-user.target.wants/
lrwxrwxrwx 1 root root 35 6月   3  2019  anacron.service -> /lib/systemd/system/anacron.service
lrwxrwxrwx 1 root root 40 6月   3  2019  avahi-daemon.service -> /lib/systemd/system/avahi-daemon.service
lrwxrwxrwx 1 root root 42 7月  31  2019  binfmt-support.service -> /lib/systemd/system/binfmt-support.service
lrwxrwxrwx 1 root root 41 6月   3  2019  console-setup.service -> /lib/systemd/system/console-setup.service
lrwxrwxrwx 1 root root 38 2月   5  2021  containerd.service -> /lib/systemd/system/containerd.service
lrwxrwxrwx 1 root root 32 6月   3  2019  cron.service -> /lib/systemd/system/cron.service
lrwxrwxrwx 1 root root 40 6月   3  2019  cups-browsed.service -> /lib/systemd/system/cups-browsed.service
lrwxrwxrwx 1 root root 29 6月   3  2019  cups.path -> /lib/systemd/system/cups.path
lrwxrwxrwx 1 root root 37 6月   3  2019  dns-clean.service -> /lib/systemd/system/dns-clean.service
lrwxrwxrwx 1 root root 38 6月   3  2019  irqbalance.service -> /lib/systemd/system/irqbalance.service
lrwxrwxrwx 1 root root 38 6月   3  2019  kerneloops.service -> /lib/systemd/system/kerneloops.service
lrwxrwxrwx 1 root root 40 6月   3  2019  ModemManager.service -> /lib/systemd/system/ModemManager.service
lrwxrwxrwx 1 root root 47 6月   3  2019  networkd-dispatcher.service -> /lib/systemd/system/networkd-dispatcher.service
lrwxrwxrwx 1 root root 38 6月   3  2019  networking.service -> /lib/systemd/system/networking.service
lrwxrwxrwx 1 root root 42 6月   3  2019  NetworkManager.service -> /lib/systemd/system/NetworkManager.service
lrwxrwxrwx 1 root root 36 6月   3  2019  ondemand.service -> /lib/systemd/system/ondemand.service
lrwxrwxrwx 1 root root 36 6月   3  2019  pppd-dns.service -> /lib/systemd/system/pppd-dns.service
lrwxrwxrwx 1 root root 36 6月   3  2019  remote-fs.target -> /lib/systemd/system/remote-fs.target
lrwxrwxrwx 1 root root 33 6月   3  2019  rsync.service -> /lib/systemd/system/rsync.service
lrwxrwxrwx 1 root root 35 6月   3  2019  rsyslog.service -> /lib/systemd/system/rsyslog.service
......
lrwxrwxrwx 1 root root 31 2月   5  2021  ssh.service -> /lib/systemd/system/ssh.service
lrwxrwxrwx 1 root root 44 6月   3  2019  systemd-resolved.service -> /lib/systemd/system/systemd-resolved.service
lrwxrwxrwx 1 root root 36 6月   3  2019  thermald.service -> /lib/systemd/system/thermald.service
lrwxrwxrwx 1 root root 38 2月   5  2021  ubuntu-fan.service -> /lib/systemd/system/ubuntu-fan.service
lrwxrwxrwx 1 root root 31 6月   3  2019  ufw.service -> /lib/systemd/system/ufw.service
lrwxrwxrwx 1 root root 47 6月   3  2019  unattended-upgrades.service -> /lib/systemd/system/unattended-upgrades.service
lrwxrwxrwx 1 root root 42 6月   3  2019  wpa_supplicant.service -> /lib/systemd/system/wpa_supplicant.service

basic.target

basic.target
	[Unit]
	Description=Basic System
	Documentation=man:systemd.special(7)
	Requires=sysinit.target
	Wants=sockets.target timers.target paths.target slices.target
	After=sysinit.target sockets.target paths.target slices.target tmp.mount
	
	RequiresMountsFor=/var /var/tmp
	Wants=tmp.mount
	
# ls -l /lib/systemd/system/sockets.target
-rw-r--r-- 1 root root 396 1月  28  2018 /lib/systemd/system/sockets.target	
# ls -l /lib/systemd/system/sockets.target.wants
lrwxrwxrwx 1 root root 14 6月   3  2019 dbus.socket -> ../dbus.socket
lrwxrwxrwx 1 root root 25 6月   3  2019 systemd-initctl.socket -> ../systemd-initctl.socket
lrwxrwxrwx 1 root root 32 6月   3  2019 systemd-journald-audit.socket -> ../systemd-journald-audit.socket
lrwxrwxrwx 1 root root 34 6月   3  2019 systemd-journald-dev-log.socket -> ../systemd-journald-dev-log.socket
lrwxrwxrwx 1 root root 26 6月   3  2019 systemd-journald.socket -> ../systemd-journald.socket
lrwxrwxrwx 1 root root 31 6月   3  2019 systemd-udevd-control.socket -> ../systemd-udevd-control.socket
lrwxrwxrwx 1 root root 30 6月   3  2019 systemd-udevd-kernel.socket -> ../systemd-udevd-kernel.socket
# ls -l /etc/systemd/system/sockets.target.wants/
lrwxrwxrwx 1 root root 32 6月   3  2019 acpid.socket -> /lib/systemd/system/acpid.socket
lrwxrwxrwx 1 root root 41 6月   3  2019 apport-forward.socket -> /lib/systemd/system/apport-forward.socket
lrwxrwxrwx 1 root root 39 6月   3  2019 avahi-daemon.socket -> /lib/systemd/system/avahi-daemon.socket
lrwxrwxrwx 1 root root 31 6月   3  2019 cups.socket -> /lib/systemd/system/cups.socket
lrwxrwxrwx 1 root root 33 2月   5  2021 docker.socket -> /lib/systemd/system/docker.socket
lrwxrwxrwx 1 root root 32 6月   3  2019 snapd.socket -> /lib/systemd/system/snapd.socket
lrwxrwxrwx 1 root root 32 6月   3  2019 uuidd.socket -> /lib/systemd/system/uuidd.socket

# ls -l /lib/systemd/system/timers.target
-rw-r--r-- 1 root root 445 1月  28  2018 /lib/systemd/system/timers.target
# ls -l /lib/systemd/system/timers.target.wants
lrwxrwxrwx 1 root root 31 6月   3  2019 systemd-tmpfiles-clean.timer -> ../systemd-tmpfiles-clean.timer
# ls -l /etc/systemd/system/timers.target.wants/
lrwxrwxrwx 1 root root 33 6月   3  2019 anacron.timer -> /lib/systemd/system/anacron.timer
lrwxrwxrwx 1 root root 35 6月   3  2019 apt-daily.timer -> /lib/systemd/system/apt-daily.timer
lrwxrwxrwx 1 root root 43 6月   3  2019 apt-daily-upgrade.timer -> /lib/systemd/system/apt-daily-upgrade.timer
lrwxrwxrwx 1 root root 32 6月   3  2019 fstrim.timer -> /lib/systemd/system/fstrim.timer
lrwxrwxrwx 1 root root 35 6月   3  2019 motd-news.timer -> /lib/systemd/system/motd-news.timer
lrwxrwxrwx 1 root root 43 6月   3  2019 snapd.snap-repair.timer -> /lib/systemd/system/snapd.snap-repair.timer

# ls -l /lib/systemd/system/paths.target
-rw-r--r-- 1 root root 394 1月  28  2018 /lib/systemd/system/paths.target
# ls -l /etc/systemd/system/paths.target.wants/
lrwxrwxrwx 1 root root 30 6月   3  2019 acpid.path -> /lib/systemd/system/acpid.path
lrwxrwxrwx 1 root root 42 6月   3  2019 apport-autoreport.path -> /lib/systemd/system/apport-autoreport.path

# ls -l /lib/systemd/system/slices.target
-rw-r--r-- 1 root root 449 1月  28  2018 /lib/systemd/system/slices.target

sysinit.target

sysinit.target
	[Unit]
	Description=System Initialization
	Documentation=man:systemd.special(7)
	Conflicts=emergency.service emergency.target
	Wants=local-fs.target swap.target
	After=local-fs.target swap.target emergency.service emergency.target
	
# ls -l /lib/systemd/system/local-fs.target
-rw-r--r-- 1 root root 547 1月  28  2018 /lib/systemd/system/local-fs.target
# ls -l /lib/systemd/system/local-fs.target.wants/
lrwxrwxrwx 1 root root 29 6月   3  2019 systemd-remount-fs.service -> ../systemd-remount-fs.service

# ls -l /lib/systemd/system/swap.target
-rw-r--r-- 1 root root 393 1月  28  2018 /lib/systemd/system/swap.target

local-fs.target

local-fs.target	
	Conflicts=shutdown.target
	After=local-fs-pre.target
	OnFailure=emergency.target
	OnFailureJobMode=replace-irreversibly	
	
# ls /lib/systemd/system/local-fs.target.wants/
lrwxrwxrwx 1 root root 29 6月   3  2019 systemd-remount-fs.service -> ../systemd-remount-fs.service
	
systemd-remount-fs.service
	After=systemd-fsck-root.service
	Before=local-fs-pre.target local-fs.target shutdown.target
	Wants=local-fs-pre.target
	ConditionPathExists=/etc/fstab
	
	ExecStart=/lib/systemd/systemd-remount-fs
	
systemd-fsck-root.service
	Wants=systemd-fsckd.socket
	Before=local-fs.target shutdown.target
	After=systemd-fsckd.socket
	
	ExecStart=/lib/systemd/systemd-fsck

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: systemd 是一个系统和服务管理器,它可以用来管理系统启动流程。 当系统启动时,systemd 会执行以下流程: 1. 引导加载程序(如 GRUB)将内核和 initramfs 加载到内存中。 2. 内核将控制权交给 init 进程。 3. init 进程读取配置文件 /etc/inittab,并根据配置文件中指定的运行级别,执行相应的初始化任务。 4. 在运行级别为 5(图形界面)时,init 进程会启动 systemd,并由它来继续管理系统的启动流程。 5. systemd 会执行所有基本系统服务(basic system services)和用户服务(user services)。这些服务由配置文件(以 .service 结尾)指定,并且可以被用户自定义。 6. 当所有基本系统服务和用户服务都已启动,系统就完成了启动流程,并进入了正常的工作状态。 希望我的回答对你有帮助! ### 回答2: systemd是一个系统和服务管理器,是大多数现代Linux发行版的默认初始化系统。它负责管理整个系统的启动过程和各种系统服务的管理。 systemd启动流程如下: 1. 引导加载:当计算机开机时,引导加载程序(如GRUB)会引导Linux内核的加载。在此过程中,系统启动时会加载systemd引导加载器。 2. 内核初始化:Linux内核被加载后,会进行一系列的初始化操作,包括设置硬件、内存管理等。同时,内核还会启动systemd进程,将系统初始化的责任交给systemd。 3. Target设置:systemd会根据预设的目标(target)进行进一步的初始化。目标是一组预定义的运行级别,它们定义了系统应该启动哪些服务。比如,graphical.target表示图形界面模式,multi-user.target表示多用户模式等。系统会根据当前目标来启动相应的服务。 4. 控制台登录:在目标设置后,systemd会启动控制台登录服务tyetty,提供一个控制台界面供用户登录。 5. 系统服务启动:systemd根据配置文件和目标设置,逐个启动各种系统服务。这些服务可以是网络服务、文件系统服务、打印服务等等。systemd通过配置文件来确定哪些服务应该在启动时被启动,以及它们之间的依赖关系。 6. 用户服务启动:除了系统服务,systemd还会启动用户级别的服务。这些服务是由每个用户自定义和管理的,比如自启动应用程序、定时任务等。 7. 启动完成:一旦所有服务启动完成,系统进入正常运行状态。 总而言之,systemd启动流程可以简单概括为引导加载、内核初始化、目标设置、控制台登录、系统服务启动和用户服务启动。它通过预定义的目标和配置文件来控制系统的初始化过程,实现了系统和服务的并行启动,提高了系统启动的效率。 ### 回答3: systemd是一种用于启动和管理Linux系统服务的初始化系统,其启动流程如下: 1. 内核引导:当计算机启动时,首先加载内核。内核负责启动系统和硬件初始化。 2. systemd引导:接下来,内核启动systemd程序。systemd是第一个用户空间程序,它会接管系统的控制权。 3. 启动目标:systemd会加载配置文件,决定启动哪些服务和目标。目标是一组预定义的系统状态,比如multi-user.target表示多用户运行级别(类似于传统的运行级别3)。 4. 依赖解析:systemd会分析服务之间的依赖关系。每个服务都有关于它所依赖的其他服务和被依赖的信息。systemd会根据这些依赖关系确定启动顺序。 5. 启动服务:一旦依赖关系解析完毕,systemd会按照正确的顺序启动服务。每个服务都有自己的启动脚本(称为服务单元),systemd会执行这些脚本。 6. 并行启动:systemd具有并行启动的能力,可以同时启动多个服务,提高启动速度。 7. 启动后事件:一旦所有服务都成功启动,systemd会触发启动后事件,并通知其他程序系统已准备就绪。 总结来说,systemd启动流程包括内核引导、systemd引导、启动目标、依赖解析、启动服务、并行启动和启动后事件。它通过优化依赖关系、并行启动和分级启动等功能,提高了系统启动的效率和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值