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éfinition : Service
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éseauNTPD
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éthode : systemctl
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
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 :
kyane@europa:~$ systemctl status rsyslog
● rsyslog.service - System Logging Service
Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-12-14 09:54:21 CET; 4h 54min ago
TriggeredBy: ● syslog.socket
Docs: man:rsyslogd(8)
man:rsyslog.conf(5)
https://www.rsyslog.com/doc/
Main PID: 777 (rsyslogd)
Tasks: 4 (limit: 9345)
Memory: 2.5M
CGroup: /system.slice/rsyslog.service
└─777 /usr/sbin/rsyslogd -n -iNONE
déc. 14 09:54:20 europa systemd[1]: Starting System Logging Service...
déc. 14 09:54:21 europa rsyslogd[777]: imuxsock: Acquired UNIX socket '/run/systemd/journal/syslog' (fd 3) from systemd. [v8.2010.0]
déc. 14 09:54:21 europa systemd[1]: Started System Logging Service.
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é (ouactivating
pendant la phase de démarrage)inactive
lorsqu'il est arrêté (oudeactivating
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 fonctionnementsystemctl restart SERVICE
pour redémarrer un service, cela revient à faire unstop
puis unstart
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
.