Systemd : les commandes essentielles Introduction systemd est un remplaçant du démon init system V pour Linux. Il a pour but d'offrir une meilleure gestion des dépendances entre services, ainsi que de permettre le chargement en parallèle des services au démarrage. Cela permet réduire le temps de démarrage du système et de lancer moins de processus. Les distributions Fedora, Mageia, Open SUSE et Debian ont adopté ce système par défaut dans leurs distributions respectives. Ubuntu utilise upstart et Gentoo utilise OpenRC. Configurer ses service L'outil systemctl permet de configurer les services qui sont lancés au démarrage. Activer un service au démarrage Pour configurer un service pour qu'il soit lancé automatiquement au démarrage du système, utiliser la commande : systemctl enable nom_du_service.service Voici un exemple avec le service sshd : # systemctl enable sshd.service ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service' Désactiver un service au démarrage Pour configurer un service pour qu'il ne soit plus lancé automatiquement au démarrage du système, utiliser la commande : systemctl disable nom_du_service.service Voici un exemple avec le service sshd : # systemctl disable sshd.service rm '/etc/systemd/system/multi-user.target.wants/sshd.service' Statut d'un service Pour connaître le statut d'un service, utiliser la commande : # systemctl is-active nom_du_service.service Voici un exemple avec le service sshd # systemctl is-active sshd.service active Les informations sont très minimalistes. Pour plus de détails, utiliser la commande : systemctl status nom_du_service.service L'auto-complétion fonctionne pour le nom du service; voici un exemple sur le service sshd : # systemctl status sshd.service sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled) Active: active (running) since lun. 2013-09-16 17:49:01 CEST; 2 days ago Main PID: 676 (sshd) CGroup: name=systemd:/system/sshd.service └─676 /usr/sbin/sshd -D sept. 16 17:49:01 fedora systemd[1]: Starting OpenSSH server daemon... sept. 16 17:49:01 fedora systemd[1]: Started OpenSSH server daemon. sept. 16 17:49:02 fedora sshd[676]: Server listening on 0.0.0.0 port 22. sept. 16 17:49:02 fedora sshd[676]: Server listening on :: port 22. sept. 18 15:02:34 fedora sshd[28095]: Accepted password for adrienfedo from 192.168.1.11 port 51600 ssh2 sept. 18 16:22:30 fedora sshd[16864]: Accepted password for adrienfedo from 192.168.1.11 port 51618 ssh2 Il est possible de lister tous les services actifs : # systemctl list-units --type=service Voici un extrait du résultat de la commande : # systemctl list-units --type=service UNIT LOAD ACTIVE SUB DESCRIPTION abrt-ccpp.service loaded active exited Install ABRT coredump hook abrt-oops.service loaded active running ABRT kernel log watcher abrt-xorg.service loaded active running ABRT Xorg log watcher abrtd.service loaded active running ABRT Automated Bug Reporting accounts-daemon.service loaded active running Accounts Service alsa-state.service loaded active running Manage Sound Card State (rest atd.service loaded active running Job spooling tools auditd.service loaded active running Security Auditing Service avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack bluetooth.service loaded active running Bluetooth service bumblebee-nvidia.service loaded active exited Compiling NVidia Driver Exécution de services Démarrer un service Pour démarrer un service, utilisez la commande : # systemctl start nom_du_service.service Illustration avec le service sshd : # systemctl is-active sshd.service active # systemctl stop sshd.service # systemctl is-active sshd.service inactive Arrêter un service Pour arrêter un service, utilisez la commande : # systemctl stop nom_du_service.service Illustration avec le service sshd : # systemctl is-active sshd.service active # systemctl stop sshd.service # systemctl is-active sshd.service inactive Redémarrer un service Une commande existe pour redémarrer un service (ce qui correspond à un systemctl stop enchaîné d'un systemctl start ) : systemctl restart nom_du_service.service # systemctl restart sshd.service Recharger la configuration un service Redémarrer un service entraîne son arrêt pendant un très court moment. Imaginons, on modifie la configuration de samba (partage de fichiers), on souhaite prendre en compte la nouvelle configuration. Redémarrer le service entraîne une déconnexion d'utilisateurs, et si un fichier est en cours de transfert, celui-ci s'annule. On peut recharger la configuration sans interrompre le service avec cette commande : systemctl reload nom_du_service.service Exemple avec le service de samba : # systemctl reload smb.service Gérer les niveaux d'exécution (runlevels) Connaitre son runlevel Pour connaitre son niveau d'exécution : systemctl get-default La réponse est chez moi : multi-user.target Ce qu'il faut mémoriser, c'est que multi-user.target correspond au runlevel historique 3 (Multi-utilisateurs console) et que graphical.target correspond au runlevel historique 5 (Multi-utilisateurs graphique) Basculer temporairement de runlevel Avant systemd, on utilisait la commande init. Ici, on va utiliser la commande systemctl isolate : systemctl isolate nom.target Exemple pour passer en runlevel 5 (graphique) : systemctl isolate graphical.target Changer de runlevel par défaut Avant systemd, on modifiait le fichier /etc/inittab. Ici, on va utiliser la commande systemctl set-default : systemctl set-default nom.target Exemple pour définir le niveau graphique : systemctl set-default graphical.target Commande chkconfig (gérer les services) Un outil à connaitre quand on fait de la Redhat ou Centos Utilisation chkconfig : chkconfig est un utilitaire qui permet de gérer les services réseaux linux en ligne de commande sur Redhat ou Centos. Il se révèle pratique dans le sens ou il permet par exemple de gérer des services dans un script ou d'ajouter un service dans certain runlevel par exmple. Pour cela il faut que le script du service soit correctement remplit (voir un déjà existant), car les informations sur celui-ci ( runlevel par défaut pour lequel le script doit être activé, description ) sont directement intégrées au début de celui-ci. Obtenir des informations sur les services : chkconfig --list Fournit la liste de tous les services reconnus et précise pour chaque runlevel si ceux-ci sont lancés au démarrage. chkconfig --list nom-service Fournit la configuration actuelle du service nommé nom-service pour tous les runlevels. Activer/Désactiver un service : chkconfig --level 35 nom-service on Spécifie que service doit être lancé au démarrage pour les runlevel 3 et 5. chkconfig --level 35 nom-service off spécifie que nom-service ne doit pas être lancé au démarrage pour les runlevels 3 et 5. chkconfig --add nom-service Ajouter nom-service comme étant un service pouvant être géré par chkconfig ( comme je le disais plus haut script doit être correctement remplit ). chkconfig --del nom-service Suppression de nom-service. chkconfig nom-service reset Remet la configuration à celle par défaut définie dans le script. Comparaison de l'utilitaire chkconfig avec systemctl