为什么Ubuntu Server将graphical.target作为默认的systemd目标?

Modified on: Sun, 10 Jun 2018 00:03:53 +0800

我有一段时间以来一直是Ubuntu用户,在工作中我们有许多Ubuntu VM 服务器,所有这些都运行Ubuntu 14.04 LTS来部署我们的Web应用程序,数据库和其他工具。

我目前正在研究Ubuntu 16.04 LTS,桌面和服务器,以便能够在不久的将来升级我们的生产服务器而不会出现问题。

由于Ubuntu 15.04,initupstart已被Systemd取代,所以我也在研究Systemd。

我注意到我的运行Ubuntu 16.04桌面版的开发计算机将graphical.target作为默认的systemd目标,这是合乎逻辑的。

但后来我注意到运行Ubuntu 16.04服务器版的测试服务器也使用graphical.target作为默认的systemd目标。

$ systemctl get-default
graphical.target

所以我很困惑。服务器没有任何图形层,那么默认目标是graphical.target

编辑#0

就像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.

所以我有点困惑。

编辑#1

Mark Stosberg的回答指出display-manager.service是其自己的16.04服务器上graphical.target的依赖关系树的一部分,他补充说没有在其计算机上安装或运行显示管理器。我也看了一下,事实上,在我的服务器上,这种依赖性就在那里:

admin@server1604:~$ systemctl list-dependencies graphical.target 
graphical.target
● ├─accounts-daemon.service
● ├─apache2.service
● ├─apport.service
● ├─display-manager.service

...

此目标在左侧有一个红色圆圈,其中大多数其他依赖项都是绿色圆圈。

这次结果是一致的:

admin@server16.04:~$ systemctl status display-manager.service 
● display-manager.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

但这是另一件奇怪的事情:在我的桌面版上,display-manager.service不是graphical.target的依赖项:

me@desktop16.04:~ $ systemctl list-dependencies graphical.target | grep display
me@desktop16.04:~ $ 

但我甚至找到了另一种选择,因为我运行Ubuntu-Gnome并使用lightdm替换默认的窗口管理器:

me@desktop16.04:~ $ systemctl list-dependencies graphical.target | grep lightdm
● ├─lightdm.service
作者:,Rémi B.

最佳答案

详细检查目标graphical.target的树依赖关系的第一级:

admin@server1604:~$ systemctl list-dependencies graphical.target 
graphical.target
● ├─accounts-daemon.service
● ├─apache2.service
● ├─apport.service
● ├─display-manager.service              (disabled)
● ├─grub-common.service
● ├─irqbalance.service
● ├─mdadm.service
● ├─ondemand.service
● ├─sysstat.service
● ├─systemd-update-utmp-runlevel.service (disabled)
● ├─ureadahead.service                   (disabled)
● └─multi-user.target

将它与multi-user.target的第一级进行比较:

admin@server16.04:~$ systemctl list-dependencies multi-user.target
multi-user.target
● ├─apache2.service
● ├─apport.service
● ├─atd.service
● ├─cron.service
● ├─dbus.service
● ├─grub-common.service
● ├─irqbalance.service
● ├─lxcfs.service
● ├─lxd-containers.service
● ├─mdadm.service
● ├─networking.service
● ├─ondemand.service
● ├─open-vm-tools.service

...

我注意到如果我们删除graphical.target树中的禁用目标(display-manager.servicesystemd-update-utmp-runlevel.serviceureadahead.service),几乎所有其余的:

  • apache2.service
  • apport.service
  • grub-common.service
  • grub-common.service
  • irqbalance.service
  • mdadm.service
  • ondemand.service
  • sysstat.service

已包含在multi-user.target的依赖关系树的第一级中。

虽然,我们应该再次询问这个事实,因为graphical.target取决于multi-user.target,所以不需要所有这些东西。听起来很奇怪。

但是在减少之后,它仍然是一个服务,accounts-daemon.service,就像Rinzwind在评论中指出

因此我们可以假设需要graphical.target来加载accounts-daemon.service

但是,在这种情况下,它再次变得奇怪,因为我认为为此目的创建一个专用目标更有意义,可能是像accounts.target或任何正确的术语来描述它。无论如何,Canonical开发人员可能有理由这样做。

但我很想知道原因。


相关问答

添加新评论