La gestion des services sous Linux

Comment démarrer, arrêter, recharger etc... un service sous Linux


Comme dit sur système V, les services sont des scripts d'initialisation gérés initialement par System V.

 

Depuis systemd le remplace. Comme dit sur Lea-linux.org, systemd est désormais utilisé sur une bonne partie des distributions comme Ubuntu, Red Hat, Fedora, Mageia, openSuSE, Arch Linux.

 

Entre System V et systemdil y a eu upstart

Le site ubuntu-fr.org permet de voir comment créer un service et la doc de systemd peut se voir sur man7.org


Comme indiqué sur cette page de RedHat, (mais c'est également la même chose pour Ubuntu/Debian), les fichiers de configuration des services peuvent être dans 3 emplacements :

  • /usr/lib/systemd/system/ (ou /lib/systemd/system/) : pour ce qui est installé par des packages RPM. Il ne faut pas y toucher. À ne pas modifier directement (écrasé lors des mises à jour). Cet emplacement a la priorité la plus basse, les répertoires suivants seront prioritaires
  • /run/systemd/system/ :  Fichiers temporaires créés au runtime (lors de l'exécution). Il ne faut pas y toucher. Priorité intermédiaire
  • /etc/systemd/system/ : contient les liens créés par la commande systemctl enable. C'est aussi ici que l'on crée un service manuellement ou que l'on crée un 'override' d'un service système. Priorité maximale cad que c'est prioritaire par rapport à ce qui est dans /usr/lib/systemd/system/, /lib/systemd/system/ ou /run/systemd/system/

 

En astuce, on peut voir la configuration d'un service avec tous les overrides appliqués avec

systemctl cat monservice
Lien vers le fichier : cliquez ici Copier le code

Si vous utilisez systemD, pour lister les services tapez

systemctl list-unit-files --type=service | grep enabled
Lien vers le fichier : cliquez ici Copier le code

Exemple de résultat :

Notez que j'avais vu une autre commande proche qui est :

systemctl list-units
Lien vers le fichier : cliquez ici Copier le code

Et qui affiche ce type de résultat :

On peut chercher un service avec un wildcard.
Par exemple pour lister l'état des services qui commencent par nfs, on peut taper

systemctl status nfs*
Lien vers le fichier : cliquez ici Copier le code

Vous pouvez afficher l'aide de systemctl avec la commande

man systemctl
Lien vers le fichier : cliquez ici Copier le code

Résultat :

Les commandes principales de systemctl sont :

Commande Fonction
systemctl list-units Lister les services
systemctl status [nom du service].service Connaitre l'état d'un service
systemctl enable [nom du service].service Activer un service
systemctl disable [nom du service].service Désactiver un service
systemctl stop [nom du service].service Arrêter un service
systemctl start [nom du service].service Démarrer un service
systemctl restart [nom du service].service Redémarrer un service
systemctl reload [nom du service].service Recharge du service avec les nouveaux paramètres (évite les coupures)
systemctl daemon-reload Pour prendre en compte la modification d'un service

Exemple de redémarrage d'un service avec systemctl :

Bon à savoir, vous pouvez spécifier le compte et groupe à utiliser pour faire tourner le service dans la section [Service]

[Service]
User=nom_utilisateur
Group=nom_groupe
Lien vers le fichier : cliquez ici Copier le code

Quand vous modifiez un service, il faut recharger le daemon systemd et redémarrer le service

sudo systemctl daemon-reload
sudo systemctl restart monservice
Lien vers le fichier : cliquez ici Copier le code

Comme dit au début, si vous devez modifier la configuration d'un service, il faut utiliser le bon répertoire et il faut utiliser /etc/systemd/system/, par autre chose comme par exemple /usr/lib/systemd/system/.

Le plus simple pour ne pas se planter est d'utiliser la commande sudo systemctl edit [le nom du service].
Par exemple pour modifier le service keepalived on ferait

sudo systemctl edit keepalived.service
Lien vers le fichier : cliquez ici Copier le code

Puis on ajouterait la section et l'ajout

[Service]
OOMScoreAdjust=-500
Lien vers le fichier : cliquez ici Copier le code

Cela va créer le fichier /etc/systemd/system/keepalived.service.d/override.conf

Derrière pour vérifier la bonne prise en compte faire

systemctl cat keepalived.service
Lien vers le fichier : cliquez ici Copier le code

On voit la surcharge sur la fin

Valider avec

sudo systemctl daemon-reload
sudo systemctl restart keepalived
Lien vers le fichier : cliquez ici Copier le code

On aurait également pu faie une copie de la config d'origine du service qui est dans /usr/lib/systemd/system/ pour la surcharger dans /etc/systemd/system/

Pour cela on aurait fait

sudo cp /usr/lib/systemd/system/keepalived.service /etc/systemd/system/
sudo nano /etc/systemd/system/keepalived.service
Lien vers le fichier : cliquez ici Copier le code

Et de là on aurait modifié directement la configuration du service.

Même principe derrière il aurait fallu faire

  • sudo systemctl daemon-reload
  • sudo systemctl restart keepalived

 

Tout çà pour dire qu'il ne faut pas modifier directement ce qu'il y a dans /usr/lib/systemd/system/ ou /lib/systemd/system/


Upstart est un autre remplaçant du traditionnel init Unix "System V" mais il a été lui même remplacé par systemd.

Si vos services sont gérés par Upstart, pour les lister, tapez :

initctl list
Lien vers le fichier : cliquez ici Copier le code

Si votre 'init' est l'ancien système, cad System V, la commande "service" ci-dessous devrait vous lister vos services :

service --status-all
Lien vers le fichier : cliquez ici Copier le code

Exemple :

Au cas où, vous trouverez plus d'informations sur System V sur ce lien :
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-boot-init-shutdown-sysv.html

L'aide de la commande service s'obtient en tapant

man service
Lien vers le fichier : cliquez ici Copier le code

Les commandes courantes sont

Commande Fonction
service --status-all Lister les services
service [nom du service] stop Arrêter un service
service [nom du service] start Démarrer un service
service [nom du service] restart Redémarrer un service

Exemple :

Pages Web

Site WebDescription
Lea-linux.orgExplications sur Systemd sur Lea-linux.org
Lea-linux.orgAjouter et supprimer des services (daemons, etc.) au démarrage.
Askubuntu.comPost de forum où l'on trouve pas mal de solutions sur ce sujet
doc.ubuntu-fr.orgsystemd