Services and daemons
When creating snapcraft.yaml to build a new snap, a snap’s executable component can be either exposed as a command or run as a background service or daemon.
For details on how to expose an executable from its constituent parts, see Defining a command.
A snap daemon or service behaves the same as a native daemon or service, and will start automatically at boot time and end when the machine is shutdown.
Defining a daemon
To define an executable as a daemon or service, add daemon: simple
to its apps stanza:
apps:
part-os-release:
command: bin/os-release.sh
daemon: simple
The value for daemon:
can be one of the following:
-
simple
Run for as along as the service is active - this is typically the default option.
-
oneshot
Run once and exit after completion, although the process is still considered running.
-
forking
The configured command calls fork()
as part of its start-up and the parent process is then expected to exit when start-up is complete. This isn’t the recommended behaviour on a modern Linux system.
-
notify
Assumes the command will send a signal to systemd to indicate that it’s running state. Note this requires usage of the daemon-notify interface.
In addition to the above types of daemon or service, the following can be set to help manage how a service is run, how it can be stopped, and what should happen after it stops:
-
post-stop-command
Sets the command to run from inside the snap after a service stops.
-
restart-condition
Defines when a service should be restarted, using values returned from systemd service exit status.
Can be one of [on-failure|on-success|on-abnormal|on-abort|on-watchdog|always|never]
.
-
restart-delay
The delay between service restarts. Defaults to unset. See the systemd.service manual on RestartSec for details.
Time duration units can be 10ns
, 10us
, 10ms
, 10s
, 10m
.
-
socket
Requires an activated daemon socket, and works with the network-bind interface to map a daemon’s socket to a service and activate it.
-
socket-mode
The mode of a socket in octal.
-
start-timeout
Optional time to wait for daemon to start.
Time duration units can be 10ns
, 10us
, 10ms
, 10s
, 10m
.
-
stop-command
Used to define a command from inside the snap to stop the service or daemon.
-
stop-timeout
The length of time to wait before terminating a service.
Time duration units can be 10ns
, 10us
, 10ms
, 10s
, 10m
. Termination is via SIGTERM
(and SIGKILL
if that doesn’t work).
-
timer
Declares that the service is activated by a timer and that the app must be a daemon. See Timer string format for syntax examples.
-
watchdog-timeout
This value declares the service watchdog timeout. For watchdog to work, the application requires access to the systemd notification socket, which can be declared by listing a daemon-notify plug in the plugs section.
Time duration units can be 10ns
, 10us
, 10ms
, 10s
, 10m
.
For further details, see Snapcraft app and service metadata.