Systemd un processus standard pour la gestion des services de démarrage dans les systèmes d'exploitation Linux. Il est utilisé pour contrôler les programmes exécutés au démarrage du système Linux. C'est un gestionnaire de système et est devenu la nouvelle norme pour les systèmes d'exploitation Linux. Systemd vous permet de créer un service systemd personnalisé pour exécuter et gérer n'importe quel processus. Dans ce tutoriel, nous expliquerons comment gérer les services avec systemd sous Linux.
Prérequis
- Un serveur exécutant Linux avec Systemd, j'utiliserai ici le serveur Ubuntu 20.04.
- Un mot de passe root est configuré sur le serveur.
Vérifier Systemd
Par défaut, Systemd est préinstallé sur tous les principaux systèmes d'exploitation. Vous pouvez vérifier la version installée de Systemd avec la commande suivante :
systemctl --version
Vous devriez voir le résultat suivant :
systemd 245 (245.4-4ubuntu3) +PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid
Vous pouvez trouver l'emplacement du Systemd avec la commande suivante :
whereis systemd
Vous devriez obtenir le résultat suivant :
systemd: /usr/bin/systemd /usr/lib/systemd /etc/systemd /usr/share/systemd /usr/share/man/man1/systemd.1.gz
Pour trouver l'emplacement systemctl, exécutez la commande suivante :
whereis systemctl
Vous devriez obtenir le résultat suivant :
systemctl: /usr/bin/systemctl /usr/share/man/man1/systemctl.1.gz
Vous pouvez également vérifier si le Systemd est en cours d'exécution ou non avec la commande suivante :
ps -eaf | grep systemd
Vous devriez obtenir le résultat suivant :
root 269 1 0 09:57 ? 00:00:01 /lib/systemd/systemd-journald root 294 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-udevd systemd+ 297 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-networkd message+ 319 1 0 09:57 ? 00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only root 329 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-logind systemd+ 382 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-resolved root 1128 1 0 10:47 ? 00:00:00 /lib/systemd/systemd --user root 1177 1152 0 10:48 pts/0 00:00:00 grep --color=auto systemd
Vous pouvez également analyser le temps pris par chaque processus au démarrage du système avec la commande suivante :
systemd-analyze blame
Vous devriez obtenir le résultat suivant :
3.662s csm.service 1.899s apt-daily-upgrade.service 1.798s dev-sda1.device 1.400s systemd-logind.service 1.336s fstrim.service 1.207s systemd-networkd.service 1.131s systemd-resolved.service 856ms man-db.service 842ms systemd-journald.service 415ms e2scrub_reap.service 320ms keyboard-setup.service 295ms networkd-dispatcher.service 239ms systemd-udev-trigger.service
Pour analyser la chaine critique au boot avec la commande suivante :
systemd-analyze critical-chain
Vous devriez obtenir le résultat suivant :
The time when unit became active or started is printed after the "@" character. The time the unit took to start is printed after the "+" character. graphical.target @4.948s ??multi-user.target @4.946s ??csm.service @1.282s +3.662s ??basic.target @1.277s ??sockets.target @1.276s ??dbus.socket @1.274s ??sysinit.target @1.257s ??systemd-update-utmp.service @1.247s +8ms ??systemd-tmpfiles-setup.service @1.228s +17ms ??systemd-journal-flush.service @1.201s +24ms ??systemd-journald.service @356ms +842ms ??systemd-journald.socket @313ms ??system.slice @225ms ??-.slice @225ms
Gérer les services avec Systemd
Systemctl fournit un moyen plus simple de gérer les services systemd.
Pour démarrer le service Apache, exécutez la commande suivante :
systemctl start apache2
Pour redémarrer le service Apache, exécutez la commande suivante :
systemctl restart apache2
Pour arrêter le service Apache, exécutez la commande suivante :
systemctl stop apache2
Pour recharger le service Apache, exécutez la commande suivante :
systemctl reload apache2
Pour permettre au service Apache de démarrer après le redémarrage du système, exécutez la commande suivante :
systemctl enable apache2
Pour supprimer le service Apache du démarrage du système, exécutez la commande suivante :
systemctl disable apache2
Pour tuer le service Apache, exécutez la commande suivante :
systemctl kill apache2
Pour masquer le service Apache, exécutez la commande suivante :
systemctl mask apache2
Pour démasquer le processus Apache, exécutez la commande suivante :
systemctl unmask apache2
Pour vérifier si le service Apache est activé ou non, exécutez la commande suivante :
systemctl is-enabled apache2
Pour vérifier l'état du service Apache, exécutez la commande suivante :
systemctl status apache2
Si le service est en cours d'exécution, vous devriez obtenir le résultat suivant :
? apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2021-01-09 10:53:12 UTC; 26s ago Docs: https://httpd.apache.org/docs/2.4/ Main PID: 1708 (apache2) Tasks: 55 (limit: 2353) Memory: 5.8M CGroup: /system.slice/apache2.service ??1708 /usr/sbin/apache2 -k start ??1709 /usr/sbin/apache2 -k start ??1710 /usr/sbin/apache2 -k start Jan 09 10:53:12 ubuntu2004 systemd[1]: Starting The Apache HTTP Server...
Après avoir renommé ou supprimé un fichier systemd, vous devrez le recharger pour appliquer les modifications. Pour recharger le fichier de service systemd, exécutez la commande suivante :
systemctl daemon-reload
Gérer les fichiers d'unité Systemd
Les commandes ci-dessus seront utiles pour gérer des services uniques. Cependant, il ne peut pas être utilisé pour trouver l'état actuel du système. Il existe de nombreuses autres commandes utiles pour fournir ces informations.
Pour voir une liste de toutes les unités disponibles, exécutez la commande suivante :
systemctl list-unit-files
Vous devriez voir une liste de tous les fichiers d'unité dans la sortie suivante :
UNIT FILE STATE VENDOR PRESET proc-sys-fs-binfmt_misc.automount static enabled -.mount generated enabled dev-hugepages.mount static enabled dev-mqueue.mount static enabled proc-sys-fs-binfmt_misc.mount disabled enabled sys-fs-fuse-connections.mount static enabled sys-kernel-config.mount static enabled sys-kernel-debug.mount static enabled sys-kernel-tracing.mount static enabled acpid.path enabled enabled ntp-systemd-netif.path enabled enabled systemd-ask-password-console.path static enabled systemd-ask-password-wall.path static enabled session-2.scope transient enabled acpid.service disabled enabled apt-daily-upgrade.service static enabled apt-daily.service static enabled [email protected] enabled enabled console-getty.service disabled disabled console-setup.service enabled enabled [email protected] static enabled cron.service enabled enabled cryptdisks-early.service masked enabled cryptdisks.service masked enabled csm.service enabled enabled dbus-org.freedesktop.hostname1.service static enabled dbus-org.freedesktop.locale1.service static enabled
Pour voir une liste de toutes les unités actives, exécutez la commande suivante :
systemctl list-units
Vous devriez voir le résultat suivant :
UNIT LOAD ACTIVE SUB DESCRIPTION > proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Executable Fil> sys-devices-pci0000:00-0000:00:03.0-virtio0-net-eth0.device loaded active plugged Virtio network device > sys-devices-pci0000:00-0000:00:04.0-virtio1-net-eth1.device loaded active plugged Virtio network device > sys-devices-pci0000:00-0000:00:05.0-virtio2-host2-target2:0:0-2:0:0:0-block-sda-sda1.device loaded active plugged QEMU_HARDDISK 1 > sys-devices-pci0000:00-0000:00:05.0-virtio2-host2-target2:0:0-2:0:0:0-block-sda.device loaded active plugged QEMU_HARDDISK > sys-devices-platform-serial8250-tty-ttyS1.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS10.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS11.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS12.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS13.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS14.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS15.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS16.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS17.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS18.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS19.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS2.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS20.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS21.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS22.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS23.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS24.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS25.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS26.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS27.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS28.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS29.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS3.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS30.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS31.device loaded active plugged /sys/devices/platform/se>
Pour voir une liste de toutes les unités défaillantes, exécutez la commande suivante :
systemctl --failed
Pour répertorier tous les services, y compris les services activés et désactivés, exécutez la commande suivante :
systemctl list-unit-files --type=service
Vous devriez voir le résultat suivant :
UNIT FILE STATE VENDOR PRESET acpid.service disabled enabled apache-htcacheclean.service disabled enabled [email protected] disabled enabled apache2.service enabled enabled [email protected] disabled enabled apt-daily-upgrade.service static enabled apt-daily.service static enabled [email protected] enabled enabled console-getty.service disabled disabled console-setup.service enabled enabled [email protected] static enabled cron.service enabled enabled cryptdisks-early.service masked enabled cryptdisks.service masked enabled csm.service enabled enabled dbus-org.freedesktop.hostname1.service static enabled dbus-org.freedesktop.locale1.service static enabled dbus-org.freedesktop.login1.service static enabled dbus-org.freedesktop.resolve1.service enabled enabled dbus-org.freedesktop.timedate1.service static enabled dbus-org.freedesktop.timesync1.service masked enabled dbus.service static enabled debug-shell.service disabled disabled dmesg.service enabled enabled [email protected] static enabled e2scrub_all.service static enabled [email protected] static enabled e2scrub_reap.service enabled enabled emergency.service static enabled fstrim.service static enabled getty-static.service static enabled [email protected] enabled enabled
Vous pouvez voir les propriétés de l'unité SSH, exécutez la commande suivante :
systemctl show sshd.service
Vous devriez voir le résultat suivant :
Id=sshd.service Names=sshd.service Requires=basic.target Wants=system.slice WantedBy=multi-user.target Conflicts=shutdown.target Before=shutdown.target multi-user.target After=syslog.target network.target auditd.service systemd-journald.socket basic.target system.slice Description=OpenSSH server daemon
Gérer les sockets avec Systemctl
Vous pouvez également gérer les sockets à l'aide de la commande Systemctl.
Pour répertorier tous les sockets système disponibles, exécutez la commande suivante :
systemctl list-unit-files --type=socket
Vous devriez voir le résultat suivant :
UNIT FILE STATE VENDOR PRESET acpid.socket enabled enabled dbus.socket static enabled ssh.socket disabled enabled syslog.socket static disabled systemd-fsckd.socket static enabled systemd-initctl.socket static enabled systemd-journald-audit.socket static enabled systemd-journald-dev-log.socket static enabled [email protected] static enabled systemd-journald.socket static enabled [email protected] static enabled systemd-networkd.socket disabled enabled systemd-rfkill.socket static enabled systemd-udevd-control.socket static enabled systemd-udevd-kernel.socket static enabled
Pour démarrer le socket SSH, exécutez la commande suivante :
systemctl start ssh.socket
Pour arrêter le socket SSH, exécutez la commande suivante :
systemctl stop ssh.socket
Pour redémarrer le socket SSH, exécutez la commande suivante :
systemctl restart ssh.socket
Pour vérifier l'état du socket SSH, exécutez la commande suivante :
systemctl status ssh.socket
Pour activer et désactiver le socket SSH au démarrage, exécutez la commande suivante :
systemctl enable ssh.socket
systemctl disable ssh.socket
Commandes supplémentaires Systemctl
Vous pouvez effectuer plusieurs tâches à l'aide de la commande systemctl. Si vous souhaitez mettre le système en mode mono-utilisateur, exécutez la commande suivante :
systemctl rescue
Pour arrêter le système, exécutez la commande suivante :
systemctl halt
Pour arrêter le système, exécutez la commande suivante :
systemctl poweroff
Pour redémarrer le système, exécutez la commande suivante :
systemctl reboot
Conclusion
Dans le guide ci-dessus, vous avez appris à gérer et à contrôler le service systemd sous Linux. J'espère que cela vous aidera à interagir avec et à contrôler votre instance systemd. N'hésitez pas à me demander si vous avez des questions.