A daemon, or system service, is a background process usually started during the boot sequence. Daemons typically run independent of users, waiting for events to occur and providing services in response. Some common daemons include:
sshd - listens for and manages incoming ?SSH connections
acpid - listens for power management events and executes scripts based on them
apache - provides a local HTTP web server
Daemon management with systemd
Since Debian Jessie, systemd is used to manage daemons.
Common daemon control
Daemons are controlled with the systemctl command:
# systemctl <COMMAND> <NAME>
where NAME is the name of the service or daemon. The most common commands for controlling daemons are:
start: starts a service immediately
stop: stops a service immediately
restart: restarts a service
reload: asks a service to reload its configuration
status: shows the current status of a service
For instance, the sshd daemon is restarted by
# systemctl restart ssh
The systemctl command is also used to enable or disable the start of a daemon during system boot:
# systemctl <COMMAND> <NAME>
where NAME is the name of the service or daemon. The most important commands to enable/disable daemons are:
enable: enable service to be started during boot sequence
disable: do not start service during boot sequence
is-enabled: check if a service is already enabled
Note that the enable/disable commands only affect the system at the next boot. To change the system immediately, use the --now option. For instance:
# systemctl --now disable ssh
will prevent starting sshd at the next boot and stop the daemon immediately.
Daemon management with sysvinit
Before Jessie, Debian used System V-style init scripts for daemon management by default. This allows daemons to operate conditionally, based on the current RunLevel of the computer. For example, a daemon can be configured to run only when the computer is in single-user mode (runlevel 1) or, more commonly, when in multi-user mode (runlevels 2-5). For more information, see Init and RunLevel.
A brief introduction to Debian sysvinit init scripts
Daemon init scripts are stored in /etc/init.d/ along with the system's other boot-time init scripts.
When a daemon is enabled or disabled, symbolic links targeting the respective init script are created or removed under the various /etc/rc*.d/ directories, corresponding to the RunLevel(s) in which the daemon is to run.
Daemon init scripts are treated as configuration files by dpkg. This means they remain on the system after a package is uninstalled, unless the 'purge' option is used.
Common daemon controls
Most daemon scripts accept a common set of options, which can be passed directly to the script at the command line, for example:
# service ssh restart Restarting OpenBSD Secure Shell server: sshd.
A brief description of the most common options follows:
start: start a service
stop: stop a service
restart: restart a service without reloading its job config file
reload: send a SIGHUP signal to running process
status: return the status of a service
Starting and stopping daemons in this manner is temporary and will not survive a reboot. Refer to the next section to enable/disable daemons on a permanent basis.
Note: When in doubt, refer to the documentation of the daemon itself.
To (re)enable/disable a daemon (using the default settings & runlevels) run the following command, where <daemon> corresponds to the name of the init script as listed in /etc/init.d/:
# update-rc.d <daemon> enable|disable
For more detail on what these commands do, refer to the update-rc.d manpage.
GUI utilities for daemon management