9.2. Gérer les services système
Note
/etc/rc.d/init.d/
. Ces scripts init étaient habituellement écrits en Bash, et autorisaient l'administrateur systèmes à contrôler l'état des services et des démons dans leurs systèmes. Sur Red Hat Enterprise Linux 7, ces scripts init ont été remplacés par des unités de service (« service units »).
.service
et ont un but similaire à celui des scripts init. Pour afficher, lancer, arrêter, redémarrer, activer ou désactiver des services système, veuillez utiliser la commande systemctl
décrite dans Tableau 9.3, « Comparaison du service Utility avec systemctl », Tableau 9.4, « Comparaison de l'utilitaire chkconfig avec systemctl », et un peu plus bas dans cette section. Les commandes service
et chkconfig
sont toujours disponibles dans le système et fonctionnent comme prévu, mais sont uniquement incluses pour des raisons de compatibilité et doivent être évitées.
service | systemctl | Description |
---|---|---|
service nom start
| systemctl start nom.service
| Lance un service. |
service nom stop
| systemctl stop nom.service
| Arrête un service. |
service nom restart
| systemctl restart nom.service
| Redémarre un service. |
service nom condrestart
| systemctl try-restart nom.service
| Redémarre un service uniquement s'il est en cours d'exécution. |
service nom reload
| systemctl reload nom.service
| Recharge la configuration. |
service nomstatus
| systemctl status nom.service
systemctl is-active nom.service
| Vérifie si un service est en cours d'exécution. |
service --status-all
| systemctl list-units --type service --all
| Affiche le statut de tous les services. |
chkconfig | systemctl | Description |
---|---|---|
chkconfig nom on
| systemctl enable nom.service
| Active un service. |
chkconfig nom off
| systemctl disable nom.service
| Désactive un service. |
chkconfig --list nom
| systemctl status nom.service
systemctl is-enabled nom.service
| Vérifie si un service est activé. |
chkconfig --list
| systemctl list-unit-files --type service
| Répertorie tous les services et vérifie s'ils sont activés. |
chkconfig --list
| systemctl list-dependencies --after
| Répertorie les services qui doivent démarrer avant l'unité spécifiée. |
chkconfig --list
| systemctl list-dependencies --before
| Répertorie les services qui doivent démarrer aprés l'unité spécifiée. |
Spécifier les unités de service
.service
. Exemple :
~]# systemctl stop nfs-server.service
systemctl
assume que l'argument suppose qu'il s'agit d'une unité de service. La commande suivante équivaut à celle se trouvant ci-dessus :
~]# systemctl stop nfs-server
~]# systemctl show nfs-server.service -p Names
9.2.1. Répertorier les services
systemctl list-units --type service
UNIT
) suivi d'une note indiquant si le ficiers d'unités a été chargée (LOAD
), son état d'activation de haut niveau (ACTIVE
) et de bas niveau (SUB
), ainsi qu'une courte description (DESCRIPTION
).
systemctl list-units
affiche uniquement les unités actives. Si vous souhaitez afficher toutes les unités chargées, quel que soit leur état, veuillez exécuter cette commande avec l'option de ligne de commande --all
ou -a
:
systemctl list-units --type service --all
systemctl list-unit-files --type service
UNIT FILE
) suivi d'informations indiquant si l'unité de service est activée ou non (STATE
). Pour obtenir des informations sur la manière de déterminer le statut des unités de service individuelles, veuillez consulter la Section 9.2.2, « Afficher le statut du service ».
Exemple 9.1. Répertorier les services
~]$ 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-vmcore.service loaded active exited Harvest vmcores for ABRT
abrt-xorg.service loaded active running ABRT Xorg log watcher
abrtd.service loaded active running ABRT Automated Bug Reporting Tool
...
systemd-vconsole-setup.service loaded active exited Setup Virtual Console
tog-pegasus.service loaded active running OpenPegasus CIM Server
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
46 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'
~]$ systemctl list-unit-files --type service
UNIT FILE STATE
abrt-ccpp.service enabled
abrt-oops.service enabled
abrt-vmcore.service enabled
abrt-xorg.service enabled
abrtd.service enabled
...
wpa_supplicant.service disabled
ypbind.service disabled
208 unit files listed.
9.2.2. Afficher le statut du service
systemctl status name.service
gdm
). Cette commande affiche le nom de l'unité de service sélectionnée suivi d'une courte description, un ou plusieurs champs décrit dans la Tableau 9.5, « Informations sur les unités de service disponibles », et si elle est exécutée par l'utilisateur root
, les entrées de journal les plus récentes seront également incluses.
Champ | Description |
---|---|
Loaded | Informations indiquant si l'unité de service est chargée, le chemin absolu vers le fichier de l'unité, et une note indiquant si l'unité est activée. |
Active | Informations indiquant si l'unité de service exécutée est suivie d'un horodatage. |
Main PID | Le PID du service système correspondant est suivi par son nom. |
Status | Informations supplémentaires sur le service système correspondant. |
Process | Informations supplémentaires sur les processus connexes. |
CGroup | Informations supplémentaires sur les Groupes de contrôle connexes (cgroups). |
systemctl is-active name.service
systemctl is-enabled name.service
systemctl is-active
et systemctl is-enabled
retournent un statut de sortie (« exit status ») de 0
si l'unité de service spécifiée est en cours d'exécution ou si elle est activée. Pour obtenir des informations sur la manière de répertorier toutes les unités de service actuellement chargées, veuillez consulter la Section 9.2.1, « Répertorier les services ».
Exemple 9.2. Afficher le statut du service
gdm.service
. Pour déterminer le statut actuel de cette unité de service, veuillez saisir ce qui suit dans une invite de shell :
~]# systemctl status gdm.service
gdm.service - GNOME Display Manager
Loaded: loaded (/usr/lib/systemd/system/gdm.service; enabled)
Active: active (running) since Thu 2013-10-17 17:31:23 CEST; 5min ago
Main PID: 1029 (gdm)
CGroup: /system.slice/gdm.service
├─1029 /usr/sbin/gdm
├─1037 /usr/libexec/gdm-simple-slave --display-id /org/gno...
└─1047 /usr/bin/Xorg :0 -background none -verbose -auth /r...
Oct 17 17:31:23 localhost systemd[1]: Started GNOME Display Manager.
Exemple 9.3. Pour afficher les services qui doivent démarrer avant un service.
~]# systemctl list-dependencies --after gdm.service
gdm.service
├─dbus.socket
├─getty@tty1.service
├─livesys.service
├─plymouth-quit.service
├─system.slice
├─systemd-journald.socket
├─systemd-user-sessions.service
└─basic.target[sortie tronquée]
Exemple 9.4. Pour afficher les services qui doivent démarrer après un service.
~]# systemctl list-dependencies --before gdm.service
gdm.service
├─dracut-shutdown.service
├─graphical.target
│ ├─systemd-readahead-done.service
│ ├─systemd-readahead-done.timer
│ └─systemd-update-utmp-runlevel.service
└─shutdown.target
├─systemd-reboot.service
└─final.target
└─systemd-reboot.service
9.2.3. Lancer un service
root
:
systemctl start name.service
gdm
). Cette commande lance l'unité de service sélectionnée dans la session actuelle. Pour obtenir des informations sur la manière d'activer une unité de service pour qu'elle soit lancée pendant l'initialisation, veuillez consulter la Section 9.2.6, « Activer un service ». Pour obtenir des informations sur la façon de déterminer le statut d'une unité de service particulière, veuillez consulter la Section 9.2.2, « Afficher le statut du service ».
Exemple 9.5. Lancer un service
httpd.service
. Pour activer cette unité de service et lancer le démon httpd
dans la session actuelle, veuillez exécuter la commande suivante en tant qu'utilisateur root
:
~]# systemctl start httpd.service
9.2.4. Arrêter un service
root
:
systemctl stop name.service
bluetooth
). Cette commande arrête l'unité de service sélectionnée dans la session actuelle. Pour obtenir des informations sur la manière de désactiver une unité de service pour l'empêcher d'être lancée pendant l'initialisation, veuillez consulter la Section 9.2.7, « Désactiver un service ». Pour obtenir des informations sur comment déterminer le statut d'une unité de service particulière, veuillez consulter la Section 9.2.2, « Afficher le statut du service ».
Exemple 9.6. Arrêter un service
bluetoothd
est nommée bluetooth.service
. Pour désactiver cette unité de service et arrêter le démon bluetoothd
dans la session actuelle, veuillez exécuter la commande suivante en tant qu'utilisateur root
:
~]# systemctl stop bluetooth.service
9.2.5. Redémarrer un service
root
:
systemctl restart name.service
httpd
). Cette commande arrête l'unité de service sélectionnée dans la session actuelle et la redémarre immédiatement. De manière plus importante, si l'unité de service n'est pas en cours d'exécution, cette commande la lancera également. Pour ordonner à Systemd de redémarrer une unité de service uniquement si le service correspondant est déjà en cours d'exécution, veuillez exécuter la commande suivante en tant qu'utilisateur root
:
systemctl try-restart name.service
root
, veuillez saisir :
systemctl reload name.service
systemctl
prend également en charge les commandes reload-or-restart
et reload-or-try-restart
qui redémarrent de tels services. Pour obtenir des informations sur la manière de déterminer le statut d'une certaine unité de service, veuillez consulter la Section 9.2.2, « Afficher le statut du service ».
Exemple 9.7. Redémarrer un service
root
:
~]# systemctl reload httpd.service
9.2.6. Activer un service
root
:
systemctl enable name.service
httpd
). Cette commande lit la section [Install]
de l'unité de service sélectionnée et crée les liens symboliques appropriés vers le fichier /usr/lib/systemd/system/name.service
dans le répertoire /etc/systemd/system/
et ses sous-répertoires. Cependant, cette commande ne réécrit pas les liens qui existent déjà. Si vous souhaitez vous assurer que les liens symboliques soient créés à nouveau, veuillez exécuter la commande suivante en tant qu'utilisateur root
:
systemctl reenable name.service
Exemple 9.8. Activer un service
root
:
~]# systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
9.2.7. Désactiver un service
root
:
systemctl disable name.service
bluetooth
). Cette commande lit la section [Install]
de l'unité de service sélectionnée et supprime les liens symboliques appropriés pointant vers le fichier /usr/lib/systemd/system/name.service
du répertoire /etc/systemd/system/
et de ses sous-répertoires. En outre, vous pouvez masquer toute unité de service pour l'empêcher d'être lancée manuellement ou par un autre service. Pour faire cela, veuillez exécuter la commande suivante en tant qu'utilisateur root
:
systemctl mask name.service
/etc/systemd/system/name.service
par un lien symbolique pointant vers /dev/null
, ce qui rend le fichier de l'unité inaccessible à Systemd. Pour inverser cette action et démasquer une unité de service, veuillez saisir en tant qu'utilisateur root
:
systemctl unmask name.service
Exemple 9.9. Désactiver un service
bluetooth.service
dans la session actuelle. Pour empêcher cette unité de service d'être lancée pendant l'initialisation, veuillez saisir ce qui suit dans une invite de shell en tant qu'utilisateur root
:
~]# systemctl disable bluetooth.service
Removed symlink /etc/systemd/system/bluetooth.target.wants/bluetooth.service.
Removed symlink /etc/systemd/system/dbus-org.bluez.service.