Service management

The majority of snaps expose their functionality via applications that run on the local system. Most of these applications are started either from the command line, the graphical desktop, or as services that run automatically.

A single snap may provide multiple applications and services. With a database snap, for example, you might expect an interactive client application alongside the service daemon.

Snaps manage their own services without the need for manual intervention. However, experienced administrators may want to interact with a snapā€™s services to help improve their integration with the local environment. For that reason, snapd offers a set of commands to allow a snapā€™s services to be inspected and their statuses changed.

Listing services

Use snap services to lists all the services added to the system by the currently installed and enabled snaps:

$ snap services
Service                               Startup   Current   Notes
bluez.bluez                           enabled   inactive  -
bluez.obex                            enabled   inactive  -
cups.cups-browsed                     enabled   active    -
cups.cupsd                            enabled   active    -
docker.dockerd                        enabled   active    -
juju.fetch-oci                        disabled  inactive  -
lxd.activate                          enabled   inactive  -
lxd.daemon                            enabled   inactive  socket-activated
lxd.user-daemon                       enabled   inactive  socket-activated
multipass.multipassd                  enabled   inactive  -
nextcloud.apache                      disabled  inactive  -
nextcloud.logrotate                   disabled  inactive  -
nextcloud.mdns-publisher              disabled  inactive  -
nextcloud.mysql                       disabled  inactive  -
nextcloud.nextcloud-cron              disabled  inactive  -
nextcloud.nextcloud-fixer             disabled  inactive  -
nextcloud.php-fpm                     disabled  inactive  -
nextcloud.redis-server                disabled  inactive  -
nextcloud.renew-certs                 disabled  inactive  -

Adding a snap name as an argument will list only those services added by that snap:

$ snap services lxd
Service          Startup  Current   Notes
lxd.activate     enabled  inactive  -
lxd.daemon       enabled  inactive  socket-activated
lxd.user-daemon  enabled  inactive  socket-activated

The output includes the service name, whether the service is started when the system starts up, and whether itā€™s currently running.

Restarting services

Services are restarted using the snap restart <snap name> command. This may be necessary if youā€™ve made custom changes to the snap application, for example, which the service needs to reload.

By default, all services for a specified snap will be restarted:

$ sudo snap restart lxd
Restarted.

Using a more specific service name performs the same operation on an individual service:

$ sudo snap restart lxd.daemon
Restarted.

The option to perform an operation on all of a snapā€™s services, or on one specific service, is common to all commands that operate on services.

If a service supports reloading, enabling the service to remain running while loading a new configuration, this can be requested with the --reload option:

$ sudo snap restart --reload lxd.daemon
Restarted.

Starting and stopping services

The start and stop commands control whether a service should be currently running:

$ sudo snap stop lxd.daemon
Stopped.

$ sudo snap start lxd.daemon
Started.

As mentioned above, these commands can operate both on individual snapā€™s services and on all services for a named snap, depending on the parameter provided.

To prevent a service from starting on the next boot, use the --disable option:

$ sudo snap stop --disable lxd.daemon

The start command includes an --enable option to re-enable the automatic starting of a service when the system boots:

$ sudo snap start --enable lxd.daemon

Inspecting logs

If you need to see the log output for a snapā€™s services, use the logs command. As with the services command, you can specify either a snap name to see the logs for all the services it contains, or the name of a specific service within a snap:

$ sudo snap logs lxd
2018-09-14T10:38:23Z lxd.daemon[11096]: => LXD is ready
(...)

$ sudo snap logs lxd.daemon
2022-07-15T17:13:04+01:00 lxd.daemon[1389234]: => LXD exited cleanly
2022-07-15T17:13:04+01:00 lxd.daemon[370462]: ==> Stopped LXD
2022-07-15T17:13:04+01:00 lxd.daemon[370462]: => Stopping LXCFS
2022-07-15T17:13:04+01:00 lxd.daemon[555302]: Running destructor lxcfs_exit
2022-07-15T17:13:05+01:00 lxd.daemon[370462]: ==> Stopped LXCFS
2022-07-15T17:13:05+01:00 lxd.daemon[370462]: => Cleaning up PID files
2022-07-15T17:13:05+01:00 lxd.daemon[370462]: => Cleaning up namespaces
2022-07-15T17:13:05+01:00 lxd.daemon[370462]: => All done
2022-07-15T17:13:05+01:00 systemd[1]: snap.lxd.daemon.service: Deactivated successfully.
2022-07-15T17:13:05+01:00 systemd[1]: Stopped Service for snap application lxd.daemon.

By default, only the last 10 lines are output. This can be changed with the -n= option which can accept either a number or all for the entire log:

snap logs -n=all lxd.daemon

Adding the -f option will keep log output open so you can follow new entries as they occur:

$ sudo snap logs lxd -f

The size and rate of log output can be limited by placing a snap within a quota group. See Journal log limits for more details.

This page (and elsewhere) should be more explicit about which ā€œsnapā€ commands need sudo, and which donā€™t. For example, on this page, there is the example:

$ sudo snap services lxd

but that command does not need sudo privilege. Conversely, running:

$ snap logs lxd

strangely prompts me for my password, and does require sudo. In fact, in the last section, the different variations of ā€œsnap logsā€ mix and match using sudo, which can be confusing.

Thanks for bringing this up. I agree that itā€™s important weā€™re consistent. Iā€™ve edited the examples you gave and Iā€™ll keep an eye out for other inconsistencies when editing other docs.

Another option is that we remove sudo from the docs entirely. The host system will either prompt you for a password or inform you that sudo is needed, and if youā€™re logged in to the store, you wonā€™t be required to enter a password anyway. Also, some systems simply donā€™t use sudo. This might be the best way forward, but it does mean we lose the subtle documentation characteristic that sudo implies some privilege, usually for a destructive or privacy related reason. Happy to hear opinions on this.

Personally, I like to see the distinction between commands that need sudo, and those that donā€™t, but thatā€™s just me.

2 Likes

I would say that the subtle documentation characteristic that sudo implies some privilege is more important, and it matches the general usecase where most(?) users donā€™t log in to their Ubuntu accounts.

1 Like

My fondness for using ā€œsudoā€ in command examples is sort of like the above ā€“ for me, itā€™s a visual warning that what Iā€™m about to do requires root privilege because it is potentially dangerous, which typically makes me take a second and wonder, ā€œHmmmm ā€¦ how can I screw this up if I make a mistake?ā€

Conversely, if I see something that requires ā€œsudoā€ that I wouldnā€™t have thought needed it, it makes me wonder, ā€œOK, why would this operation not be available to regular users?ā€ Perfect example: ā€œsnap logsā€, which made me assume that looking at logs might be a security hole if anyone was allowed to peruse them.

In any event, for me itā€™s an aesthetic thing, and I will defer to those higher up the food chain.

Thanks for the comments (and @Lin-Buo-Ren). For what itā€™s worth, I agree about keeping sudo too. But there had been some discussions internally about this and itā€™s good to have some outside feedback we can refer to.

I would mention the snap restart ā€œā€“reloadā€ option:

[restart command options]
      --no-wait      Do not wait for the operation to finish but just print the change id.
      --reload       If the service has a reload command, use it instead of restarting.

And for ā€œsnap logsā€, is it worth mentioning the ā€œ-n=ā€ option to show either that number of lines, or ā€œallā€?

Iā€™ve updated this doc with your suggestions. Thanks!

Is there a way to enable/disable a specific service of a snap without starting/stopping it? I can see all of the variations of stop and start with options, but I donā€™t see the magic incantation that will, for example, disable a specific snap service while still leaving it running.

I donā€™t think there is a way to disable a specific service within a snap and ask snapd to leave it running.

I believe that is correct; kind of weird that something so straightforward canā€™t be done. Oh, well.