I keep finding, while googling, that they're located at /usr/lib/systemd/system/ and /etc/systemd/system/. However, in my ubuntu, the first doesn't even exist, and the other has only a few services
bluetooth.target.wants default.target.wants hybrid-sleep.target.wants shutdown.target.wants
dbus-org.bluez.service display-manager.service multi-user.target.wants sockets.target.wants
dbus-org.freedesktop.Avahi.service display-manager.service.wants network-online.target.wants suspend.target.wants
dbus-org.freedesktop.ModemManager1.service getty.target.wants paths.target.wants sysinit.target.wants
dbus-org.freedesktop.nm-dispatcher.service graphical.target.wants plexmediaserver.service syslog.service
dbus-org.freedesktop.thermald.service hibernate.target.wants printer.target.wants timers.target.wants
Where are the others?
When I run systemctl list-units I see so many services but I don't know where to locate them. For example, where is my plexmediaserver.service? I need to know because that's where I want to put my other units.
The package-provided service files are all usually located in
/lib/systemd/system
. For example, search for.service
in the package index.From
man systemd.unit
:The latter ones are for user sessions. IIRC Ubuntu 16.04 still uses upstart for user sessions, so those files are only applicable from after 16.04.
For a specific service, to see what systemd is reading, run
systemctl status <service>
orsystemctl show <service>
:There are good tools to know about whenever you need to locate something.
The first is
locate
, which is used to locate files by name. It uses a pre-built index, so it's extremely fast. However, it sometimes misses new files that haven't been indexed, or may also miss files with restrictive permissions. In this case, a quicklocate
command would find all the systemd files on Ubuntu:If you want to focus on that Plex file, you can use a pipe to filter the results:
The other tool to know about is
find
, which does a live search of a particular directory to find files. It has a lot of options. Checkman find
for details. To look forplexmediaserver.service
anywhere on your system, you would use:Finally, in this case, you probably know which package that the file you are looking for belongs to. If you aren't sure of the exact package name, you can use this syntax to find all the package which contain 'plex' in their name:
If you find that the package you are interested is named 'plexmediaserver', then you can use this syntax to list all the files in that package:
Again, you can use a pipe to filter the results to just the service file you are looking for:
Now you'll be able to find files for many common cases.
Using
systemd-analyze
command:All folders which can contain user services:
I prefer
systemd-analyze --global unit-paths
All folders which can contain system services:
See: manpage
Three commands for three directories found in
man systemd
:I am running Ubuntu 20.04
Bonus note:
systemctl status <service>
produces more human readable output whereassystemctl show <service>
produces more low level program readable output