GNU/Linux >> Tutoriels Linux >  >> Linux

Comment gérer les services Systemd avec Systemctl sous Linux

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.


Linux
  1. Comment gérer et répertorier les services sous Linux

  2. Comment gérer les unités systemd au démarrage

  3. Comment utiliser la commande Systemctl pour gérer les services Systemd

  4. Linux - Comment obtenir moins de Ttys avec Systemd ?

  5. Utiliser Systemctl pour gérer les services

Liste des services Linux avec Systemctl

Commandes Systemctl pour gérer le service Systemd

Comment gérer les versions de Nodejs avec n sous Linux

Comment exécuter un script Shell en tant que service SystemD sous Linux

Comment utiliser systemctl sous Linux

Comment gérer le stockage avec GParted Linux