Почему сервер Ubuntu имеет графический.target как цель по умолчанию systemd?

19

Я некоторое время был пользователем Ubuntu, и на работе у нас много серверов Ubuntu VM, все из которых запускают Ubuntu 14.04 LTS для развертывания наших веб-приложений, баз данных и других инструментов.

В настоящее время я изучаю Ubuntu 16.04 LTS , рабочий стол и сервер, чтобы иметь возможность обновлять наши производственные серверы в ближайшем будущем, не вызывая проблем.

Так как Ubuntu 15.04, init и upstart были заменены на Systemd , поэтому я тоже изучаю Systemd.

Я заметил, что мой компьютер разработки, работающий на Ubuntu 16.04 Desktop, имеет graphical.target в качестве целевой системы systemd, что и логично.

Но потом я заметил, что тестовый сервер, на котором запущена версия Ubuntu 16.04 Server, также использует graphical.target в качестве целевой системы systemd.

$ systemctl get-default
graphical.target

Так что я смущен. На сервере нет графического слоя, так как это означает, что цель по умолчанию - graphical.target ?

Изменить # 0

Как и Ринзвинд в комментариях, я посмотрел на цель, чтобы увидеть, активна она или нет ...

, а ответ - ДА:

[email protected]:~$ systemctl get-default
graphical.target

[email protected]:~$ 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

Ответ Марка Стосберга указывает на то, что display-manager.service является частью дерева зависимостей graphical.target на своем собственном сервере 16.04, и он добавляет, что на его машине не установлен или работает диспетчер дисплея. Я тоже посмотрел на это, и действительно, на моем сервере эта зависимость существует:

[email protected]:~$ systemctl list-dependencies graphical.target 
graphical.target
● ├─accounts-daemon.service
● ├─apache2.service
● ├─apport.service
● ├─display-manager.service

...

И эта цель имеет красный круг слева, где большинство других зависимостей имеют зеленый цвет.

И на этот раз результат согласован:

[email protected]:~$ 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 :

[email protected]:~ $ systemctl list-dependencies graphical.target | grep display
[email protected]:~ $ 

Но я даже нашел альтернативу, потому что я запускаю Ubuntu-Gnome с lightdm , заменяя оконный менеджер по умолчанию:

[email protected]:~ $ systemctl list-dependencies graphical.target | grep lightdm
● ├─lightdm.service
    
задан Rémi B. 13.10.2016 в 15:47
источник

3 ответа

1

Более подробно узнать первый уровень зависимости от дерева целевой graphical.target :

[email protected]:~$ 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 :

[email protected]:~$ 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.service , systemd-update-utmp-runlevel.service , ureadahead.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 были причины думать так.

Но мне любопытно узнать его причины.

    
ответ дан Rémi B. 14.10.2016 в 12:14
источник
9

Несмотря на название цели, на сервере Ubuntu 16.04 нет графического интерфейса. Вы можете проверить эту команду и сравнить ее с вашим рабочим столом, если хотите:

systemctl list-dependencies graphical.target 

На моем сервере Ubuntu 16.04 я вижу, что цели зависят от «display-manager.service», но диспетчер отображения не установлен или работает.

Я ожидаю, что серверы Ubuntu настроены таким образом для какой-то последовательности, хотя я согласен, что это запутывает.     

ответ дан Mark Stosberg 13.10.2016 в 17:44
6

В руководстве redhat :

  

Например, модуль graphical.target, который используется для запуска графического сеанса, запускает системные службы, такие как диспетчер отображения GNOME (gdm.service) или Accounts Service (accounts-daemon.service), а также активирует мульти -user.target. Аналогично, блок 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. 
    
ответ дан Rinzwind 13.10.2016 в 17:29