Les services

Objectifs

  • Savoir ce qu'est un service, ou daemon.

  • Savoir piloter les services avec systemctl.

Mise en situation

Lorsque l'on liste les processus en cours d'exécution, on peut effectivement voir les programmes que l'on a démarré ou les commandes que l'on a lancé. Cependant, en cherchant un peu, on peut aussi voir des processus qui semblent inconnus, comme rsyslogd, ntpd, etc. Ce sont en fait des programmes qui s'exécutent en arrière plan et que l'on appelle des services.

DéfinitionService

Un service (parfois appelé daemon) est un programme qui s'exécute en arrière-plan, plutôt contrôlé par le système d'exploitation que par l'utilisateur directement.

Exemple

Les services peuvent remplir de nombreuses fonctions différentes, quelques exemple :

  • NetworkManager est un service sur certaines distribution Linux qui permet de gérer la configuration réseau

  • NTPD est un service qui sert à gérer l'heure de la machine (grâce au protocole NTP)

  • unattended-upgrades permet de gérer les mises à jour automatiquement, en arrière plan, sur les systèmes utilisant APT

Systemd

Sur Ubuntu, comme beaucoup autres distributions Linux, un logiciel est au coeur du système d'exploitation et permet, entre autre, de gérer les différents services : Systemd. Systemd est le logiciel qui initialise le système d'exploitation au démarrage (dont le fameux processus init fait partie) et qui démarre et pilote les différents services de la machine.

Méthodesystemctl

Systemd est un logiciel très complexe, nous ne nous intéresseront ici que à la partie qui permet de gérer les services de la machine. Pour cela on peut utiliser la commande systemctl

1
systemctl --type=service

Cette commande permet de lister tout les services sur la machine, associé à leur description. On peut voir qu'il y en a plusieurs dizaines par défaut. Il est possible d'afficher le statut d'un service :

1
kyane@europa:~$ systemctl status rsyslog
2
● rsyslog.service - System Logging Service
3
     Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
4
     Active: active (running) since Mon 2020-12-14 09:54:21 CET; 4h 54min ago
5
TriggeredBy: ● syslog.socket
6
       Docs: man:rsyslogd(8)
7
             man:rsyslog.conf(5)
8
             https://www.rsyslog.com/doc/
9
   Main PID: 777 (rsyslogd)
10
      Tasks: 4 (limit: 9345)
11
     Memory: 2.5M
12
     CGroup: /system.slice/rsyslog.service
13
             └─777 /usr/sbin/rsyslogd -n -iNONE
14
15
déc. 14 09:54:20 europa systemd[1]: Starting System Logging Service...
16
déc. 14 09:54:21 europa rsyslogd[777]: imuxsock: Acquired UNIX socket '/run/systemd/journal/syslog' (fd 3) from systemd.  [v8.2010.0]
17
déc. 14 09:54:21 europa systemd[1]: Started System Logging Service.
18
déc. 14 09:54:21 europa rsyslogd[777]: [origin software="rsyslogd" swVersion="8.2010.0" x-pid="777" x-info="https://www.rsyslog.com"] start

Ici on voit le statut du service rsyslog, un service qui gère les messages d'erreurs ou d'information pour les autres logiciels sur la machine. L'information importante (qui s'affiche en couleur dans le terminal) est que le service est active (running), donc qu'il est en fonctionnement. On peut aussi voir, sur la seconde ligne de résultat, que le service est enabled, ce qui signifie qu'il est lancé automatiquement au démarrage de l'ordinateur.

Cycle de vie d'un service

Un service peut-être dans plusieurs états, les principaux étant :

  • active lorsqu'il est démarré (ou activating pendant la phase de démarrage)

  • inactive lorsqu'il est arrêté (ou deactivating pendant la phase d'extinction)

  • failed lorsqu'il s'est arrêté suite à une erreur

Méthode

L'état d'un service peut-être modifié avec les commandes suivantes :

  • systemctl start SERVICE pour démarrer un service stoppé

  • systemctl stop SERVICE pour stopper un service en fonctionnement

  • systemctl restart SERVICE pour redémarrer un service, cela revient à faire un stop puis un start

  • systemctl reload SERVICE pour demander à un service de recharger sa configuration sans s'arrêter

Remarque

Dans le cas d'une utilisation comme ordinateur personnel, il est peu courant de manipuler les services, ou même Systemd. En effet les services sont gérés par Systemd, qui les démarre et les arrêtent en fonction du besoin. Cependant dans le cas d'un serveur, il arrive que l'on ajoute des services à la machine (par exemple un serveur web, ou une base de donnée) et qu'il soit nécessaire de les piloter avec systemctl. il est donc important de garder en tête ces notions et commandes de base.

À retenir

Un programme qui s'exécute en arrière plan est un service. Les services sont gérés par Systemd sous Ubuntu, mais il est possible de les piloter soi même à l'aide de la commande systemctl.