I have come across a .service
that contains the following:
[Install]
WantedBy=multi-user.target
The original .service
file can be found here.
What is the the meaning of multi-user.target
?
I am on Ubuntu 16.04 LTS.
I have come across a .service
that contains the following:
[Install]
WantedBy=multi-user.target
The original .service
file can be found here.
What is the the meaning of multi-user.target
?
I am on Ubuntu 16.04 LTS.
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
systemctl get-default
.
This is the dependencies handling mechanism in Systemd. `multi-user.targe\t 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.
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.
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
the list of dependencies can also be found with
$ systemctl list-dependencies multi-user.target
TL;DR
multiuser.target is a system setting based terminal only meant for use on systems that do not have or require a graphical desktop environment. Such as for instance, a cluster.
The reference to runlevels is not really relevant, as they are not part of systemd. They are a set of system configurations (in this case 3 different ones) that you can use to determine which services will be started and which not.
But the short answer to your question is: multiuser.target
is a special system configuration for a shell-only environment on multi-user systems that can be called at startup (or whenever you want, actually)/
[Install]
section of a unit file. Ironically, it is the very next table down from the one hyperlinked in the question.