111

I have come across a .service that contains the following:

[Install]
WantedBy=multi-user.target

The original .service file can be found HERE.

I am on Ubuntu 16.04LTS.

Rui F Ribeiro
  • 55,929
  • 26
  • 146
  • 227
eddyP23
  • 1,221
  • 2
  • 7
  • 7
  • 3
    Possible duplicate of [What is systemd's target, service and socket?](https://unix.stackexchange.com/questions/159462/what-is-systemds-target-service-and-socket) – muru Nov 15 '17 at 08:49
  • 2
    It's not a proper duplicate, as (reading beyond the title) _this_ question is asking about the `[Install]` section of a unit file. Ironically, it is the very next table down from the one hyperlinked in the question. – JdeBP Nov 15 '17 at 11:52
  • 1
    [This new related question](https://unix.stackexchange.com/q/506347/135943) has a lot more details in the answer and is very well worth reading. – Wildcard Mar 14 '19 at 23:13
  • It really is, thanks for pointing there @Wildcard. – Rapti Jan 22 '21 at 15:43

4 Answers4

82

multi-user.target means that the systemd-service will start when the system reach runlevel 2.

To complement the answer, here's a table of the targets and their run levels:

Run Lvl Target Units                        Description
0       runlevel0.target, poweroff.target   Shut down and power off
1       runlevel1.target, rescue.target     Set up a rescue shell
2,3,4   runlevel[234].target,               Set up a non-gfx multi-user shell
        multi-user.target
5       runlevel5.target, graphical.target  Set up a gfx multi-user shell
6       runlevel6.target, reboot.target     Shut down and reboot the system
Tobias Holm
  • 921
  • 1
  • 6
  • 5
  • 1
    But it's WantedBy=multi-user.target, so it just means the service will start and before runlevel 2 right ? not necessarily when system reaches runlevel 2, am I wrong ? – Tristan Dec 10 '18 at 17:53
  • 3
    What's a `gfx` multi-user shell? Any reference? – Giuseppe Crinò Oct 14 '19 at 07:46
  • 1
    A gfx multi-user shell refer to a multi-user system with a GUI. – Tobias Holm Oct 15 '19 at 14:44
  • 2
    @TobiasHolm You might not be completely right, I'm getting the same target (graphical.target) even on a GUI-less Debian server with `systemctl get-default`. – aderchox Nov 27 '21 at 10:30
26

This is the dependencies handling mechanism in systemd. multi-user.target is the alternative for runlevel 3 in systemV world. That said, reaching multi-user.target includes starting the "Confluent ZooKeeper" service. Probably that's what you need indeed.

sourcejedi
  • 48,311
  • 17
  • 143
  • 296
George Ivanov
  • 468
  • 5
  • 7
  • 7
    pretty vague answer. amazed that it got the green tick. some people be like, knows a little, throws a brittle. – ino Aug 21 '21 at 05:14
  • actually, it's pretty informative even for systemd disliking person - if one is not ready to grasp content, they shall start learning from scratch. – silpol Feb 26 '23 at 08:46
26

I found this landoflinux.com tutorial the simplest to understand. You can run the following command yourself to see what's there:

$ ls -al /lib/systemd/system/runlevel*
lrwxrwxrwx. 1 root root 15 Apr 25 10:31 /lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 Apr 25 10:31 /lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 Apr 25 10:31 /lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Apr 25 10:31 /lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Apr 25 10:31 /lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 Apr 25 10:31 /lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 Apr 25 10:31 /lib/systemd/system/runlevel6.target -> reboot.target

But you should probably just read the linked question accepted answer about targets.

icc97
  • 837
  • 8
  • 10
2

tldr if a service is wanted by multi-user.target, the service requires a number of services needed for a non-graphical multi-user session to be started (see the required services in the chart below).

$ man systemd.special
...
multi-user.target

    A special target unit for setting up a multi-user system (non-graphical). This is pulled in by graphical.target.

    Units that are needed for a multi-user system shall add Wants= dependencies for their unit to this unit during installation. This is best configured via WantedBy=multi-user.target in the unit's [Install] section.
...

the services required by the target can be found in the chart below:

                             cryptsetup-pre.target veritysetup-pre.target
                                                  |
(various low-level                                v
 API VFS mounts:             (various cryptsetup/veritysetup devices...)
 mqueue, configfs,                                |    |
 debugfs, ...)                                    v    |
 |                                  cryptsetup.target  |
 |  (various swap                                 |    |    remote-fs-pre.target
 |   devices...)                                  |    |     |        |
 |    |                                           |    |     |        v
 |    v                       local-fs-pre.target |    |     |  (network file systems)
 |  swap.target                       |           |    v     v                 |
 |    |                               v           |  remote-cryptsetup.target  |
 |    |  (various low-level  (various mounts and  |  remote-veritysetup.target |
 |    |   services: udevd,    fsck services...)   |             |              |
 |    |   tmpfiles, random            |           |             |    remote-fs.target
 |    |   seed, sysctl, ...)          v           |             |              |
 |    |      |                 local-fs.target    |             | _____________/
 |    |      |                        |           |             |/
 \____|______|_______________   ______|___________/             |
                             \ /                                |
                              v                                 |
                       sysinit.target                           |
                              |                                 |
       ______________________/|\_____________________           |
      /              |        |      |               \          |
      |              |        |      |               |          |
      v              v        |      v               |          |
 (various       (various      |  (various            |          |
  timers...)      paths...)   |   sockets...)        |          |
      |              |        |      |               |          |
      v              v        |      v               |          |
timers.target  paths.target   |  sockets.target      |          |
      |              |        |      |               v          |
      v              \_______ | _____/         rescue.service   |
                             \|/                     |          |
                              v                      v          |
                          basic.target         rescue.target    |
                              |                                 |
                      ________v____________________             |
                     /              |              \            |
                     |              |              |            |
                     v              v              v            |
                 display-    (various system   (various system  |
             manager.service     services        services)      |
                     |         required for        |            |
                     |        graphical UIs)       v            v
                     |              |            multi-user.target
emergency.service    |              |              |
        |            \_____________ | _____________/
        v                          \|/
emergency.target                    v
                              graphical.target

source

the list of dependencies can also be found with

$ systemctl list-dependencies multi-user.target
user3804598
  • 189
  • 1
  • 6