System V, systemd et Upstart
Contrôle des services Linux
Processus init
Le processus init sur les systèmes Linux est communément appelé la mère de tous les processus. Le processus « init » aura toujours un ID de processus de « 1 » (pid de 1), c’est le premier processus démarré par le noyau sur votre système. init est l’abréviation de initialization et est utilisé pour démarrer tous les autres processus et votre niveau d’exécution par défaut. Au fil du temps, de nombreuses distributions ont adopté la norme System V pour la gestion des services, cependant, d’autres distributions sont passées à « Systemd » ou « Upstart ».
SysV – System V
Si votre distribution Linux utilise les normes « SysV », alors init examinera un fichier appelé « /etc/inittab. Ce fichier contient votre niveau d’exécution par défaut sous lequel le système doit démarrer. Par exemple « id:3:initdefault : » lancerait automatiquement tous les scripts dans les structures de répertoires runlevel 3.
Niveau d’exécution 1 – Mode mono-utilisateur
Niveau d’exécution 2 – Identique au niveau d’exécution 3, mais sans NFS
Niveau d’exécution 3 – Mode multi-utilisateurs et réseau
Niveau d’exécution 4 – Inutilisé
Niveau d’exécution 5 – Identique au niveau d’exécution 3, mais avec un bureau graphique (système de fenêtre X)
Pour plus d’informations sur le processus de démarrage : Démarrage de Linux
Exécution de scripts d’init « System V »
Bien souvent, en tant qu’administrateur, vous devrez arrêter, démarrer, redémarrer ou recharger un service/daemon particulier. Pour ce faire, nous utilisons une commande appelée « service ». Cette commande vous permet d’exécuter les scripts « System V » qui sont normalement situés dans le répertoire « /etc/init.d ». En plus de pouvoir démarrer et arrêter un service/daemon, nous pouvons également visualiser l’état actuel.
service command examples
Status Check : Ici, nous demandons l’état actuel du démon « sshd »
# service sshd statusopenssh-daemon (pid 1599) is running...
Vérification de l’état de tous les processus : Exécute tous vos scripts init par ordre alphabétique avec l’option status. Voici un extrait de la sortie de cette commande:
# service --status-allabrt-ccpp hook is installedabrtd (pid 1708) is running...abrt-dump-oops (pid 1716) is running...acpid (pid 1487) is running...atd (pid 1740) is running...auditd (pid 1262) is running...automount (pid 1571) is running...avahi-daemon (pid 1375) is running...Usage: /etc/init.d/bluetooth {start|stop}certmonger (pid 1752) is running...cpuspeed is stoppedcrond (pid 1724) is running...cupsd (pid 1476) is running...dnsmasq is stoppedfirstboot is not scheduled to runhald (pid 1496) is running...
Stop : Ici, nous avons demandé que le démon « sshd » s’arrête. L’option status a également été émise pour vérifier le nouveau statut.
# service sshd stopStopping sshd: # service sshd statusopenssh-daemon is stopped
Start : Cette fois, nous demandons à ce que le « sshd » soit démarré.
# service sshd startStarting sshd:
Restart : Cette fois, nous allons « rebondir » le démon « sshd » (arrêter puis redémarrer immédiatement).
# service sshd restartStopping sshd: Starting sshd:
Reload : L’option « reload » est très utile si vous avez apporté des modifications à un fichier de configuration et que vous souhaitez intégrer ces modifications.
# service sshd reloadReloading sshd:
Upstart
Upstart est un remplacement événementiel du démon « init ». Upstart a été écrit par un ancien employé de la société bien connue qui nous fournit Ubuntu (Canonical). L’idée derrière Upstart était de s’éloigner du processus de démarrage traditionnel où les tâches lancées devaient être terminées avant que la tâche suivante puisse démarrer. Upstart est un système piloté par les événements qui lui permet de répondre aux événements du système de manière asynchrone. Upstart est responsable du démarrage et de l’arrêt des services et des tâches au démarrage et à l’arrêt. Il surveille aussi activement ces services et ces tâches. Upstart est également capable d’exécuter des scripts sysvinit sans modification. Plusieurs distributions ont inclus Upstart en remplacement de System V. Parmi elles, RHEL, CentOS, Fedora. Cependant, beaucoup de ces systèmes sont maintenant passés à « systemd »
Comme nous l’avons vu précédemment, nous pouvons contrôler les services/daemons avec la commande « service » sous System V, cependant, sous Upstart nous utilisons une commande différente. La commande qui est utilisée avec Upstart est « initctl ». Cette commande vous permet de communiquer avec le daemon init. Voici quelques exemples de base de l’utilisation de la commande « initctl ».
exemples de la commande initctl
Vérification de l’état : Cette option demande l’état du travail spécifié.
root@john-desktop:~# initctl status cupscups start/running, process 672
Le nom du travail est donné en premier, suivi du but et de l’état actuels de l’instance, puis du numéro d’identification du processus.
Stop : L’option « stop » spécifie que l’état souhaité doit être « arrêté ».
root@john-desktop:~# initctl stop cupscups stop/waiting
Départ : L’option « start » va démarrer une nouvelle instance du travail spécifié.
root@john-desktop:~# initctl start cupscups start/running, process 3574
Restart : Cette option permettra de redémarrer que le travail spécifié est redémarré. L’instance qui est redémarrée conservera sa configuration originale.
root@john-desktop:~# initctl restart cupscups start/running, process 3606
Reload : Cette option permet de recharger l’instance spécifiée.
root@john-desktop:~# initctl reload cups
List : List demande l’affichage de tous les travaux/instances et de leur état associé. Voici un extrait de la sortie de cette commande:
root@john-desktop:~# initctl listavahi-daemon start/running, process 611mountall-net stop/waitingnmbd stop/waitingpasswd stop/waitingrc stop/waitingrsyslog start/running, process 601tty4 start/running, process 1080udev start/running, process 437upstart-udev-bridge start/running, process 429
Reload Configuration : Cette option demande au démon init de recharger ses fichiers de configuration. Aucun travail n’est redémarré par cette commande.
root@john-desktop:~# initctl reload-configuration cups
Dans des circonstances normales, vous ne devriez pas avoir besoin d’émettre la commande de rechargement ci-dessus car « init » surveille ses répertoires de configuration avec « inotify » et se recharge automatiquement en cas de changement.
systemd
systemd est un autre remplacement de System V. systemd signifie system daemon. Son nom est intentionnellement en minuscules ! systemd a été conçu pour permettre une meilleure gestion des dépendances et avoir la capacité de gérer plus de travail en parallèle au démarrage. systemd supporte l’instantané de votre système et la restauration de l’état de vos systèmes, garde la trace des processus stockés dans ce qui est connu comme un « cgroup » par opposition à la méthode conventionnelle « PID ». systemd est maintenant repris par de nombreuses distributions Linux populaires. Fedora, Mandriva, Mageia, Arch Linux. Il est également prévu que systemd soit inclus dans les nouvelles versions de RHEL (Red hat).
Comme nous l’avons vu avec « System V » et « Upstart », les deux types ont leur propre commande unique pour contrôler les services. Il en va de même pour systemd. La commande qui est utilisée sous systemd est « systemctl ». Vous trouverez ci-dessous quelques exemples de certaines des fonctionnalités de base de la commande « systemctl ».
commande systemd | Description |
---|---|
systemctl start mytest.service | Démarre le service spécifié |
systemctl stop mytest.service | Arrête le service spécifié |
systemctl status mytest.service | Demande l’état du service spécifié |
systemctl list-unit-files –type=service | Liste les services connus qui peuvent être démarrés ou arrêtés | systemctl restart mytest.service | Démarre puis arrête le service spécifié |
systemctl reload mytest.service | Si elle est prise en charge, elle rechargera les fichiers de configuration |
systemctl enable mytest.service | Equivalent de chkconfig mytest on | systemctl disable mytest.service | Equivalent de chkconfig mytest off |
systemctl is-enabled mytest.service | Vérifie si le service est configuré pour démarrer dans le niveau d’exécution actuel |
.