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.
Prior to the release of snapd 2.66, all services were run with root-level access. The snap commands used to manage these services would require equivalent access, such as by preceding snap with sudo
.
With the release of snapd 2.66, there is now distinction between user-level services and root-level services. User-level services can be listed and managed without requiring any privilege escalation, while services running as root still require equivalent access.
The snap services
command lists the active and enabled state of snap-based services for the current user, or with the additional --global
argument, for the entire system.
$ sudo snap services --global
Service Startup Current Notes
lxd.activate enabled inactive -
lxd.daemon enabled active socket-activated
lxd.user-daemon enabled inactive socket-activated
multipass.multipassd enabled active -
nextcloud.apache enabled active -
nextcloud.logrotate enabled inactive timer-activated
nextcloud.mysql enabled active -
nextcloud.nextcloud-cron enabled active -
nextcloud.nextcloud-fixer enabled active -
nextcloud.php-fpm enabled active -
nextcloud.redis-server enabled active -
nextcloud.renew-certs enabled active -
Adding a snap name as an argument will list only those services added by that snap, or with <snap-name>.<app>
, for a single app:
$ snap services lxd.daemon
Service Startup Current Notes
lxd.daemon enabled active socket-activated
The output includes the service name, whether the service is started when the system starts up, and whether it’s currently running.
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.
Using both the snap name and the specific app enables you to target a specific service:
$ snap restart lxd.daemon
2024-11-21T21:51:06+01:00 INFO Waiting for "snap.lxd.daemon.service" to stop.
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:
snap restart --reload lxd.daemon
The start
and stop
commands control whether a service should be currently running.
Adding the --system
argument can be used to manage system-level services, while --user
and --users=all
can be used to manage services for the current user, or for all users, respectively.
The following combination is also valid:
snap {start,stop,restart} --system --users=all my-snap
As root, the default behavior of not specifying anything is the equivolent of:
snap {start,stop,restart} --system my-snap
If operating on a snap that contains a user-service as root, the switch --user
or --users=all
must be provided to indicate that it’s intentional, otherwise an error will be thrown.
To prevent a service from starting on the next boot, use the --disable
option:
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:
snap start --enable lxd.daemon
User-services cannot be disabled or enabled individually for users currently, they can only be enabled globally or disabled globally (i.e for all users).
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.
Last updated 23 days ago.