systemd之multi-user.target与graphical.target
文章目录
自启动管理服务:multi-user.target
在载入内核驱动硬件后,进过 sysinit.target 的初始化流程让系统可以存取之后,加上 basic.target 让其成为基础的操作系统, 之后就是服务器要顺利运行需要的各种主机服务以及网络服务的启动了。這些服务的启动大多是附挂在 multi-user.target 这个操作环节底下, 你可以到 /etc/systemd/system/multi-user.target.wants/ 里去查看预设的要被启动的服务!
也就是说,一般来说服务的启动脚本都是放在下面的目录內:
- /usr/lib/systemd/system (系统预设的服务启动脚本)
- /etc/systemd/system (管理员自己开发与设定的脚本)
而使用者针对主机的本机服务与网络服务的各项 unit 若要 enable 的话,就是將它放到 /etc/systemd/system/multi-user.target.wants/ 这个目录底下做个链接,这样就可以在开机的时候去启动它。
使用 systemctl enable/disable 时,系统就是从 /etc/systemd/system/multi-user.target.wants/ 建立或删除链接。
兼容systemV 的 rc-local.service
过去的 Linux 系統完成开机后,还想要让系统额外执行某些程序的话,可以将该程序指令或者脚本的绝对路径名称写入到 /etc/rc.d/rc.local 这个文件中!
而新的 systemd 机制中,它建议直接写一个 systemd 的启动脚本文件到 /etc/systemd/system 底下,然后使用 systemctl enable 的方式来设置启动它,而不要直接使用 rc.local 这个文件了!
1 2 3 4 5 6 7 8 |
[root@ZhangSir ~]#ls /etc/systemd/system/ basic.target.wants default.target.wants remote-fs.target.wants bluetooth.target.wants dev-virtio\x2dports-org.qemu.guest_agent.0.device.wants sockets.target.wants dbus-org.bluez.service display-manager.service spice-vdagentd.target.wants dbus-org.fedoraproject.FirewallD1.service getty.target.wants sssd.service.d dbus-org.freedesktop.Avahi.service graphical.target.wants sysinit.target.wants dbus-org.freedesktop.ModemManager1.service multi-user.target.wants system-update.target.wants default.target printer.target.wants |
但新版的 systemd 还是兼容之前的方式的!那就是 rc-local.service 这个服务的功能了!这个服务不需要启动,它会自己判断 /etc/rc.d/rc.local 是否具有可执行的权限来判断要不要启动这个服务!
你可以这就检查看看:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 1. 先看一下 /etc/rc.d/rc.local 的权限,然后检查 multi-user.target 有没有这个服务 [root@ZhangSir ~]#ll /etc/rc.d/rc.local -rw-r--r--. 1 root root 473 Nov 20 2015 /etc/rc.d/rc.local [root@ZhangSir ~]#systemctl status rc-local.service * rc-local.service - /etc/rc.d/rc.local Compatibility Loaded: loaded (/usr/lib/systemd/system/rc-local.service; static; vendor preset: disabled) Active: inactive (dead) [root@ZhangSir ~]#systemctl list-dependencies multi-user.target | grep rc-local # 明明就有这个服务,但是 rc.local 不具有可执行 (x) 的权限,因此这个服务不会被执行 # 2. 加入可执行权限后,再看一下 rc-local 是否可被启用! [root@ZhangSir ~]#chmod a+x /etc/rc.d/rc.local; ll /etc/rc.d/rc.local -rwxr-xr-x. 1 root root 473 Nov 20 2015 /etc/rc.d/rc.local [root@ZhangSir ~]#systemctl daemon-reload [root@ZhangSir ~]#systemctl list-dependencies multi-user.target | grep rc-local * |-rc-local.service |
通过这个 chmod a+x /etc/rc.d/rc.local 的步骤,你的许多脚本就可以放在 /etc/rc.d/rc.local 这个文件内, 系统在每次开机都会去执行这个文件内的指令!
提供 tty 界面与登录的服务
在 multi-user.target 底下还有个 getty.target 的操作界面项目! 能不能提供适当的登录服务也是 multi-user.target 底下的內容!包括 systemd-logind.service, systemd-user-sessions.service 等服务。
由于服务都是同步运行的,不一定哪个服务先完成启动。如果 getty 服务先启动完成时,你会发现有可用的終端机尝试让你登录系统了。 但是,如果 systemd-logind.service 或 systemd-user-sessions.service 服务尚未执行完成的话,那么你还是无法登录系统的。
图形界面启动graphical.target
如果你的 default.target 是 multi-user.target 的話,那么这个步骤就不会执行。反之,如果是 graphical.target 的话,那么 systemd 就会开始载入用户管理服务于图形界面管理 (window display manager, DM) 等,来启动图形界面让用户以图形界面登入系统!
graphical.target 的服務:
1 2 3 4 5 6 7 |
[root@ZhangSir ~]#systemctl list-dependencies graphical.target graphical.target * |-accounts-daemon.service * |-gdm.service * |-network.service * |-rtkit-daemon.service ......(省略) |
其中多了一些图形界面账户管理的功能,至于实际上用户可以登录的服务是 gdm.service !
gdm.service 最执行的重要的文件是 /usr/sbin/gdm !那就是让使用者可以使用图形界面登录的最重要服务!
到此为止,systemd 就已经完整的处理完毕了,你可以使用图形界面或文字界面的方式来登录系统,系统也顺利的完成开机, 将能够将 /etc/rc.d/rc.local 的脚本实际执行一次了。
那如果预设的是图形界面 (graphical.target) 但是想要关掉而进入文字界面 (multi-user.target) 呢? 使用『 systemctl isolate multi-user.target 』即可!使用『 init 3 』也是可以的! 只是系统实际执行的还是『 systemctl isolate multi-user.target 』!