Rém*_* B. 26 server boot systemd
我已经成为 Ubuntu 用户有一段时间了,在工作中我们有许多 Ubuntu VM服务器,所有这些服务器都运行Ubuntu 14.04 LTS以部署我们的 Web 应用程序、数据库和其他工具。
我目前正在学习Ubuntu 16.04 LTS台式机和服务器,以便能够在不久的将来升级我们的生产服务器而不会造成问题。
对于Ubuntu 15.04,init并upstart通过已被替换Systemd,所以我学习Systemd了。
我注意到我的运行 Ubuntu 16.04 桌面版的开发计算机graphical.target作为默认的 systemd 目标,这是合乎逻辑的。
但后来我注意到运行 Ubuntu 16.04 服务器版的测试服务器也graphical.target用作默认的 systemd 目标。
$ systemctl get-default
graphical.target
Run Code Online (Sandbox Code Playgroud)
所以我很困惑。服务器没有任何图形层,那么默认目标是graphical.target怎么回事?
就像 Rinzwind 在评论中建议的那样,我查看了目标以查看它是否处于活动状态...
答案是肯定的:
admin@server1604:~$ systemctl get-default
graphical.target
admin@server1604:~$ systemctl status graphical.target
? graphical.target - Graphical Interface
Loaded: loaded (/lib/systemd/system/graphical.target; static; vendor preset: enabled)
Active: active since jeu. 2016-10-13 16:03:18 CEST; 46min ago
Docs: man:systemd.special(7)
oct. 13 16:03:18 fdea systemd[1]: Reached target Graphical Interface.
Run Code Online (Sandbox Code Playgroud)
所以我有点困惑。
Mark Stosberg 的回答指出,这display-manager.service是graphical.target它自己的 16.04 服务器上的依赖关系树的一部分,他补充说,它的机器上没有安装或运行显示管理器。我也看了看,确实,在我的服务器上,这种依赖是存在的:
admin@server1604:~$ systemctl list-dependencies graphical.target
graphical.target
? ??accounts-daemon.service
? ??apache2.service
? ??apport.service
? ??display-manager.service
...
Run Code Online (Sandbox Code Playgroud)
这个目标在左边有一个红色圆圈,大多数其他依赖项都有一个绿色圆圈。
而这一次的结果是一致的:
admin@server16.04:~$ systemctl status display-manager.service
? display-manager.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
Run Code Online (Sandbox Code Playgroud)
但这是另一件奇怪的事情:在我的桌面版中,display-manager.service不是以下项的依赖项graphical.target:
me@desktop16.04:~ $ systemctl list-dependencies graphical.target | grep display
me@desktop16.04:~ $
Run Code Online (Sandbox Code Playgroud)
但我什至找到了替代方案,因为我运行Ubuntu-Gnome时lightdm替换了默认窗口管理器:
me@desktop16.04:~ $ systemctl list-dependencies graphical.target | grep lightdm
? ??lightdm.service
Run Code Online (Sandbox Code Playgroud)
Mar*_*erg 11
尽管目标名称如此,但在 Ubuntu Server 16.04 上没有任何图形运行。如果您愿意,可以运行此命令来检查它并与您的桌面发行版进行比较:
systemctl list-dependencies graphical.target
Run Code Online (Sandbox Code Playgroud)
在我的 Ubuntu 16.04 服务器上,我看到目标依赖于“display-manager.service”,但没有安装或运行显示管理器。
我希望 Ubuntu 服务器以这种方式设置以实现某种一致性,尽管我同意这令人困惑。
从红帽手册:
例如,用于启动图形会话的 graphics.target 单元会启动系统服务,例如 GNOME 显示管理器 (gdm.service) 或帐户服务 (accounts-daemon.service) 并激活多用户。目标单位。类似地,multi-user.target 单元启动其他基本系统服务,例如 NetworkManager(NetworkManager.service)或 D-Bus(dbus.service),并激活另一个名为 basic.target 的目标单元。
所以设置它并没有错,因为当处理显示服务的服务没有设置时,它不会激活显示管理器。
对于服务器,您可以将其设置为multi-user.target但不是必需的。看起来如果你这样做,你最终会在运行级别 4 和运行级别 5 当你不这样做时。
Runlevel Target Units Description
0 runlevel0.target, poweroff.target Shut down and power off the system.
1 runlevel1.target, rescue.target Set up a rescue shell.
2 runlevel2.target, multi-user.target Set up a non-graphical multi-user system.
3 runlevel3.target, multi-user.target Set up a non-graphical multi-user system.
4 runlevel4.target, multi-user.target Set up a non-graphical multi-user system.
5 runlevel5.target, graphical.target Set up a graphical multi-user system.
6 runlevel6.target, reboot.target Shut down and reboot the system.
Run Code Online (Sandbox Code Playgroud)
更详细地检查目标树依赖关系的第一级graphical.target:
admin@server1604:~$ systemctl list-dependencies graphical.target \ngraphical.target\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80accounts-daemon.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80apache2.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80apport.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80display-manager.service (disabled)\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80grub-common.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80irqbalance.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80mdadm.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80ondemand.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80sysstat.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80systemd-update-utmp-runlevel.service (disabled)\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80ureadahead.service (disabled)\n\xe2\x97\x8f \xe2\x94\x94\xe2\x94\x80multi-user.target\nRun Code Online (Sandbox Code Playgroud)\n\n将其与第一级进行比较multi-user.target:
admin@server16.04:~$ systemctl list-dependencies multi-user.target\nmulti-user.target\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80apache2.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80apport.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80atd.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80cron.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80dbus.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80grub-common.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80irqbalance.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80lxcfs.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80lxd-containers.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80mdadm.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80networking.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80ondemand.service\n\xe2\x97\x8f \xe2\x94\x9c\xe2\x94\x80open-vm-tools.service\n\n...\nRun Code Online (Sandbox Code Playgroud)\n\n我注意到,如果我们删除树中禁用的目标graphical.target(display-manager.service、systemd-update-utmp-runlevel.service、ureadahead.service),几乎所有剩余的目标:
apache2.serviceapport.servicegrub-common.servicegrub-common.serviceirqbalance.servicemdadm.serviceondemand.servicesysstat.service已经包含在 的依赖树的第一级中multi-user.target。
虽然,我们应该再次询问这个事实,因为取决于graphical.target,multi-user.target没有必要所有这些东西。听起来够奇怪的。
但在这次减少之后,它仍然是一项服务,accounts-daemon.service就像Rinzwind 在其评论中指出的那样。
所以我们可以假设graphical.target需要加载accounts-daemon.service.
然而,在这种情况下,它又很奇怪,因为我认为为此目的创建一个专用目标更有意义,也许类似accounts.target或任何正确的术语来描述它。无论如何,Canonical 开发人员可能有他们的理由做出这样的想法。
但我仍然好奇地想知道其原因。
\n| 归档时间: |
|
| 查看次数: |
16823 次 |
| 最近记录: |