it-swarm.com.de

Warum hat ein Ubuntu-Server graphical.target als Standardsystemziel?

Ich bin seit einiger Zeit Ubuntu-Benutzer und bei der Arbeit haben wir viele Ubuntu VM -Server , die alle Ubuntu 14.04 LTS ausführen, um sie bereitzustellen unsere Webanwendungen, Datenbanken und andere Tools.

Momentan studiere ich Ubuntu 16.04 LTS, Desktop und Server, um unsere Produktionsserver in naher Zukunft problemlos aktualisieren zu können.

Seit Ubuntu 15.04 wurden init und upstart durch Systemd ersetzt, daher lerne ich auch Systemd.

Ich habe festgestellt, dass auf meinem Entwicklungscomputer, auf dem Ubuntu 16.04 Desktop Edition ausgeführt wird, graphical.target als Standardsystemziel festgelegt ist, was logisch ist.

Aber dann bemerkte ich, dass der Testserver, auf dem Ubuntu 16.04 Server Edition ausgeführt wird, auch graphical.target als Standardsystemziel verwendet.

$ systemctl get-default
graphical.target

Also bin ich verwirrt. Der Server hat keine grafische Ebene. Wie kommt es, dass das Standardziel graphical.target ist?

Bearbeiten Sie # 0

Wie Rinzwind in den Kommentaren vorgeschlagen hat, habe ich mir das Ziel angesehen, um zu sehen, ob es aktiv ist oder nicht ...

und die Antwort ist JA:

[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.

Also bin ich etwas verwirrter.

Bearbeiten Sie # 1

Die Antwort von Mark Stosberg weist darauf hin, dass display-manager.service Teil des Abhängigkeitsbaums des graphical.target auf seinem eigenen 16.04-Server ist und dass auf seinem Computer kein Display-Manager installiert ist oder ausgeführt wird. Ich habe mir das auch angesehen, und tatsächlich gibt es auf meinem Server diese Abhängigkeit:

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

...

Und dieses Ziel hat links einen roten Kreis, während die meisten anderen Abhängigkeiten einen grünen Kreis haben.

Und dieses Mal ist das Ergebnis konsistent:

[email protected]:~$ systemctl status display-manager.service 
● display-manager.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

Aber hier ist eine andere seltsame Sache: Auf meiner Desktop-Edition ist der display-manager.service keine Abhängigkeit von graphical.target:

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

Aber ich habe sogar eine Alternative gefunden, weil ich Ubuntu-Gnome mit lightdm ausführe und den Standard-Fenstermanager ersetze:

[email protected]:~ $ systemctl list-dependencies graphical.target | grep lightdm
● ├─lightdm.service
19
Rémi B.

Detailliertere Betrachtung der ersten Ebene der Baumabhängigkeit des Ziels 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

und vergleiche es mit der ersten Ebene des 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

...

Ich stelle fest, dass, wenn wir die deaktivierten Ziele in der graphical.target-Struktur entfernen (display-manager.service, systemd-update-utmp-runlevel.service, ureadahead.service), fast alle der verbleibenden:

  • Apache2.service
  • apport.service
  • grub-common.service
  • grub-common.service
  • irqbalance.service
  • mdadm.service
  • ondemand.service
  • und sysstat.service

sind bereits in der ersten Ebene des Abhängigkeitsbaums des multi-user.target enthalten.

Obwohl wir noch einmal nach dieser Tatsache fragen sollten, da der graphical.target vom multi-user.target abhängt, besteht keine Notwendigkeit für all diese Dinge. Es hört sich schon komisch an.

Aber nach dieser Reduzierung bleibt es ein Dienst, der accounts-daemon.service, wie Rinzwind wies in seinem Kommentar darauf hin .

Wir können also davon ausgehen, dass der graphical.target zum Laden des accounts-daemon.service benötigt wird.

In diesem Fall ist es jedoch wieder seltsam, da es meiner Meinung nach sinnvoller wäre, ein dediziertes Ziel für diesen Zweck zu erstellen, z. B. accounts.target oder einen korrekten Begriff, um ihn zu beschreiben. Wie auch immer, wahrscheinlich hatten Canonical-Entwickler ihre Gründe, solche Überlegungen anzustellen.

Aber ich bin gespannt auf die Gründe.

1
Rémi B.

Trotz des Namens des Ziels läuft auf Ubuntu Server 16.04 nichts Grafisches. Mit diesem Befehl können Sie Folgendes überprüfen und mit Ihrem Desktop vergleichen:

systemctl list-dependencies graphical.target 

Auf meinem Ubuntu 16.04-Server sehe ich, dass die Ziele von "display-manager.service" abhängen, aber kein Display-Manager installiert ist oder ausgeführt wird.

Ich gehe davon aus, dass Ubuntu-Server auf diese Art und Weise auf Konsistenz eingestellt sind, obwohl ich der Meinung bin, dass dies verwirrend ist.

9
Mark Stosberg

Aus dem redhat manual :

Beispielsweise startet die Einheit graphical.target, mit der eine grafische Sitzung gestartet wird, Systemdienste wie GNOME Display Manager (gdm.service) oder Accounts Service (accounts-daemon.service) und aktiviert auch den Mehrbenutzer. Zieleinheit. In ähnlicher Weise startet die Einheit multi-user.target andere wichtige Systemdienste wie NetworkManager (NetworkManager.service) oder D-Bus (dbus.service) und aktiviert eine andere Zieleinheit namens basic.target.

Das Festlegen ist also nicht falsch, da der Display-Manager nicht aktiviert wird, wenn der Dienst, der den Display-Dienst verarbeitet, nicht festgelegt ist.

Für einen Server können Sie multi-user.target festlegen, dies ist jedoch nicht erforderlich. Sieht so aus, als ob du auf Runlevel 4 landest und auf Runlevel 5, wenn du es nicht tust.

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. 
8
Rinzwind