Ceci est une ancienne révision du document !
Table des matières
Version : 2023.01
Dernière mise-à-jour : 2023/06/08 12:23
Topic 1: System Architecture
Contenu du Module
- Topic 1: System Architecture
- Contenu du Module
* Présentation
- Processus de Démarrage du Noyau Linux
- Processus Init
- Démarrer RHEL/CentOS 5 avec SysVinit
- Niveaux d'exécution sous RHEL/CentOS 5
- Inittab
- Scripts de Démarrage
- rc.sysinit sous RHEL/CentOS 5
- Répertoire init.d
- Linux Standard Base
- Codes Retour Standardisés
- Scripts
- Répertoires rcx.d
- rc.local
- La Commande chkconfig
- Démarrer RHEL/CentOS 6 avec Upstart
- Inittab
- Initialisation du Système
- Runlevels
- [CTL]-[ALT]-[DEL]
- mingetty
- Gestion des Services
- La Commande initctl
- Jobs
- Événements
- Etats
- Démarrer et Arrêter les Jobs
- La Commande status
- La Commande start
- La Commande stop
- La Commande restart
- Démarrer RHEL/CentOS 7
- La Commande systemctl
- Fichiers de Configuration
- La Commande systemd-analyze
- Gestion des Services
- Fichiers Spéciaux
- Commandes
- La Commande lspci
- La Commande lsusb
- La Commande dmidecode
- Répertoire /proc
- Répertoires
- ide/scsi
- acpi
- bus
- net
- sys
- La Commande sysctl
- Fichiers
- Processeur
- Interruptions système
- Canaux DMA
- Plages d'entrée/sortie
- Périphériques
- Modules
- Statistiques de l'utilisation des disques
- Partitions
- Espaces de pagination
- Statistiques d'utilisation du processeur
- Statistiques d'utilisation de la mémoire
- Version du noyau
- Interprétation des informations dans /proc
- Commandes
- free
- uptime ou w
- iostat
- vmstat
- mpstat
- sar
- Utilisation des commandes en production
- Identifier un système limité par le processeur
- Identifier un système ayant un problème de mémoire
- Identifier un système ayant un problème d'E/S
- Modules usb
- udev
- La Commande udevadm
- Système de fichiers /sys
- Limiter les Ressources
- ulimit
- Groupes de Contrôle
- LAB #1 - Travailler avec les cgroups sous RHEL/CentOS 7
Présentation
Le processus de démarrage de Linux peut être résumé en trois étapes majeurs :
- Le firmware ou micrologiciel démarre en effectuant un test rapide du matériel, appelé un Power-On Self Test ou POST, puis recherche le Charger de Démarrage (Bootloader) à exécuter à partir d'un support bootable,
- Le Charger de Démarrage est exécuté et il détermine quel noyau Linux à charger,
- Le noyau se charge en mémoire et commence à exécuter en arrière plan les programmes nécessaires au fonctionnement du système.
A retenir : Il est possible de consulter le défilement des messages lors du démarrage en appuyant sur la touche Echap ou simultanément sur les touches Ctrl+Alt+F1. En sachant que la liste des messages se défilent rapidement, il est possible de les consulter après le démarrage du système à l'aide de la commande dmesg qui lit les derniers messages contenu dans le Kernel Ring Buffer. Ces messages sont aussi copiés dans le fichier /var/log/boot.log.
Cette description simpliste résume cependant un processus bien plus compliqué que ce cours va détailler.
Processus de Démarrage du Noyau Linux
Le processus de démarrage du Noyau Linux peut être divisé en 6 étapes :
Etape | Description |
---|---|
Chargement, configuration et exécution du chargeur du noyau | Le fichier bootsect.s est chargé en mémoire par le BIOS. Une fois configuré celui-ci charge le reste du noyau en mémoire |
Configuration des paramètres et bascule vers le mode 32 bits | Le fichier boot.s met en place un IDT (Interrupt Descriptor Table) temporaire et GDT (Global Descriptor Table) temporaire et gère le basculement vers le mode 32 bits |
Décompression du Noyau | Le fichier head.s décompresse le noyau |
Initialisation du noyau et de la mémoire | Le fichier head.s crée un GDT et IDT définitif |
Configuration du noyau | Le fichier main.c met en place les contraintes de mémoire et configure la mémoire virtuelle |
Création du processus Init | Le fichier main.c crée le processus init |
La fonction init_post() essaie ensuite d'exécuter un des processus suivant dans l'ordre :
- /sbin/init
- /etc/init
- /bin/init
- /bin/sh
Dans le cas d'un échec à ce stade le message Kernel Panic sera affiché.
Processus Init
Le premier processus lancé par le noyau est Init. L'exécutable lancé est /sbin/init. Son rôle est de d'initialiser le système et de lancer certains autres services. Les tâches accomplies par init sont :
- le montage de /proc et de /sys,
- configuration des paramètres du noyau présents dans /etc/sysctl.conf,
- l'activation de SELinux,
- la mise à l'heure du système,
- la définition des consoles textes,
- la définition du nom de la machine,
- la détection des périphériques USB,
- la mise en place du support RAID et LVM,
- l'activation des quotas de disque,
- le montages des systèmes de fichiers,
- le re-montage du système de fichiers racine en lecture/écriture,
- l'activation du swap,
- le lancement de syslog,
- le chargement des modules du noyau,
- le nettoyage des fichiers temporaires,
- la définition des variables d'environnement tels PATH et RUNLEVEL
Démarrer RHEL/CentOS 5 avec SysVinit
Niveaux d'exécution sous RHEL/CentOS 5
Il existe 8 niveaux d'exécution ou RUNLEVELS sous RHEL/CentOS 5. Quatre des 8 sont réservés :
RUNLEVEL | Description |
---|---|
0 | Arrêt de la machine |
1 | Mode mono-utilisateur pour la maintenance |
6 | Redémarrage de la machine |
S ou s | Mode mono-utilisateur avec seul la partition racine montée |
Les autres quatre RUNLEVELS sont définis par chaque distribution. Par exemple, sous RedHat, ils sont :
RUNLEVEL | Description |
---|---|
2 | Mode multi-utilisateur sans NFS |
3 | Mode multi-utilisateur |
4 | Non-utilisé |
5 | Mode multi-utilisateur avec session graphique |
Il existe aussi 3 pseudo-niveaux d'exécution a, b et c. Ces pseudo-niveaux permettent à init de faire quelquechose sans changer de niveau d'exécution.
Pour connaître le niveau d'exécution actuel de la machine, saisissez la commande suivante :
[root@centos5 ~]# runlevel N 5
La lettre N indique que le système n'a pas changé de niveau d'exécution depuis son démarrage.
Pour modifier le niveau d'exécution courant, il convient d'utiliser la commande init ou telinit suivie du numéro du nouveau niveau d'exécution. Ces commandes peuvent prendre plusieurs options :
Option | Description |
---|---|
Q ou q | Demande à Init de relire le fichier /etc/inittab |
-t | Permet de modifier le temps accordé par Init aux processus entre l'envoi du signal SIGTERM et l'envoi du signal SIGKILL |
Inittab
Le fichier /etc/inittab permet de définir les services à démarrer en fonction du RUNLEVEL :
[root@centos5 ~]# cat /etc/inittab # # inittab This file describes how the INIT process should set up # the system in a certain run-level. # # Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org> # Modified for RHS Linux by Marc Ewing and Donnie Barnes # # Default runlevel. The runlevels used by RHS are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:5:initdefault: # System initialization. si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 # Trap CTRL-ALT-DELETE ca::ctrlaltdel:/sbin/shutdown -t3 -r now # When our UPS tells us power has failed, assume we have a few minutes # of power left. Schedule a shutdown for 2 minutes from now. # This does, of course, assume you have powerd installed and your # UPS connected and working correctly. pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down" # If power was restored before the shutdown kicked in, cancel it. pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled" # Run gettys in standard runlevels 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 # Run xdm in runlevel 5 x:5:respawn:/etc/X11/prefdm -nodaemon
Dans l'exemple ci-dessus, chaque ligne non-commentée est composée de quatre champs, séparés par le caractère : :
Champ | Nom | Description |
---|---|---|
1 | Identifiant | Identifiant unique de la ligne composé de 1 à 4 caractères |
2 | RUNLEVELS | Liste des niveaux d'exécution concernés par la ligne |
3 | Action | Méthode utilisé pour lancer la commande se trouvant dans le champ 4 |
4 | Commande | Commande à lancer |
Le champ action prend une des directives suivantes :
Directive | Description |
---|---|
respawn | Le processus est relancé en cas d'arrêt de celui-ci |
mingetty | Assure la gestion du terminal texte |
once | Le processus n'est exécuté qu'une fois |
wait | Le processus n'est exécuté qu'une fois. Init attend la fin du processus avant de passer à la ligne suivante |
boot | Le processus est exécuté au démarrage de la machine. Le champ RUNLEVELS est sans importance |
bootwait | Le processus est exécuté au démarrage de la machine. Le champ RUNLEVELS est sans importance. Init attend la fin du processus avant de passer à la ligne suivante |
off | Revient à commenter la ligne |
ondemand | La même chose que respawn mais la commande est exécuté dans un des 3 pseudo-niveaux d'exécution |
initdefault | Définit le niveau d'exécution par défaut |
sysinit | La commande est exécutée au démarrage da la machine avant les lignes boot et bootwait |
powerfail | La commande est exécutée quand init reçoit un signal SIGPWR d'un onduleur |
powerwait | La commande est exécutée quand init reçoit un signal SIGPWR d'un onduleur. Init attend la fin du processus avant de passer à la ligne suivante |
powerokwait | La commande est exécutée si Init reçoit un signal de rétablissement du courant |
powerfailnow | La commande est exécutée quand Init reçoit un signal comme quoi la batterie de l'onduleur est presque vide |
ctrlaltdel | La commande est exécutée quand Init reçoit un signal SIGINT. Ce signal est envoyé par la combinaison de touches [CTRL] [ALT] [SUPPR] |
kbrequest | La commande est exécutée suivant des séquences de touches saisies au clavier |
L'analyse de notre fichier d'exemple sous RHEL/CentOS 5 indique :
Ligne | Description |
---|---|
id:5:initdefault: | Le niveau d'exécution par défaut est 5 |
si::sysinit:/etc/rc.d/rc.sysinit | La commande /etc/rc.d/rc.sysinit est lancée au démarrage de la machine |
l0:0:wait:/etc/rc.d/rc 0 | La commande /etc/rc.d/rc est lancée pour le niveau d'exécution 0 |
l1:1:wait:/etc/rc.d/rc 1 | La commande /etc/rc.d/rc est lancée pour le niveau d'exécution 1 |
l2:2:wait:/etc/rc.d/rc 2 | La commande /etc/rc.d/rc est lancée pour le niveau d'exécution 2 |
l3:3:wait:/etc/rc.d/rc 3 | La commande /etc/rc.d/rc est lancée pour le niveau d'exécution 3 |
l4:4:wait:/etc/rc.d/rc 4 | La commande /etc/rc.d/rc est lancée pour le niveau d'exécution 4 |
l5:5:wait:/etc/rc.d/rc 5 | La commande /etc/rc.d/rc est lancée pour le niveau d'exécution 5 |
l6:6:wait:/etc/rc.d/rc 6 | La commande /etc/rc.d/rc est lancée pour le niveau d'exécution 6 |
ca::ctrlaltdel:/sbin/shutdown -t3 -r now | La commande /sbin/shutdown -t3 -r now est lancée si les touches [CTRL] [ALT] [SUPPR] sont appuyées simultanément |
pf::powerfail:/sbin/shutdown -f -h +2 “Power Failure; System Shutting Down” | La commande /sbin/shutdown -f -h +2 est lancée quand Init reçoit le signal SIGPWR |
pr:12345:powerokwait:/sbin/shutdown -c “Power Restored; Shutdown Cancelled” | La commande /sbin/shutdown -c est lancée quand Init reçoit un signal de rétablissement du courant |
1:2345:respawn:/sbin/mingetty tty1 | Le terminal tty1 est initialisé par la commande /sbin/mingetty. Le terminal est disponible en appuyant sur les touches [CTRL] [ALT] [F1] |
2:2345:respawn:/sbin/mingetty tty2 | Le terminal tty2 est initialisé par la commande /sbin/mingetty. Le terminal est disponible en appuyant sur les touches [CTRL] [ALT] [F2] |
3:2345:respawn:/sbin/mingetty tty3 | Le terminal tty3 est initialisé par la commande /sbin/mingetty. Le terminal est disponible en appuyant sur les touches [CTRL] [ALT] [F3] |
4:2345:respawn:/sbin/mingetty tty4 | Le terminal tty4 est initialisé par la commande /sbin/mingetty. Le terminal est disponible en appuyant sur les touches [CTRL] [ALT] [F4] |
5:2345:respawn:/sbin/mingetty tty5 | Le terminal tty5 est initialisé par la commande /sbin/mingetty. Le terminal est disponible en appuyant sur les touches [CTRL] [ALT] [F5] |
6:2345:respawn:/sbin/mingetty tty6 | Le terminal tty6 est initialisé par la commande /sbin/mingetty. Le terminal est disponible en appuyant sur les touches [CTRL] [ALT] [F6] |
x:5:respawn:/etc/X11/prefdm -nodaemon | xdm est lancé dans le niveau d'exécution 5 |
Scripts de Démarrage
Naviguez à /etc/rc.d et saisissez la commande ls :
[root@centos5 ~]# cd /etc/rc.d [root@centos5 rc.d]# ls init.d rc0.d rc2.d rc4.d rc6.d rc.sysinit rc rc1.d rc3.d rc5.d rc.local
rc.sysinit sous RHEL/CentOS 5
D'après l'étude du fichier inittab nous savons que le script rc.sysinit est exécuté en premier.
Répertoire init.d
Le répertoire /etc/rc.d/init.d contient les scripts permettant de lancer les services du système :
[root@centos5 rc.d]# ls init.d/* init.d/abrtd init.d/cpuspeed init.d/iptables init.d/netfs init.d/portreserve init.d/sandbox init.d/vboxadd init.d/acpid init.d/crond init.d/irqbalance init.d/network init.d/postfix init.d/saslauthd init.d/vboxadd-service init.d/atd init.d/cups init.d/jexec init.d/NetworkManager init.d/psacct init.d/single init.d/vboxadd-x11 init.d/auditd init.d/dnsmasq init.d/kdump init.d/nfs init.d/rdisc init.d/smartd init.d/wpa_supplicant init.d/autofs init.d/firstboot init.d/killall init.d/nfslock init.d/restorecond init.d/snmpd init.d/ypbind init.d/avahi-daemon init.d/functions init.d/lvm2-monitor init.d/nscd init.d/rpcbind init.d/snmptrapd init.d/bluetooth init.d/haldaemon init.d/mdmonitor init.d/nslcd init.d/rpcgssd init.d/sshd init.d/certmonger init.d/halt init.d/messagebus init.d/ntpd init.d/rpcidmapd init.d/sssd init.d/cgconfig init.d/httpd init.d/microcode_ctl init.d/ntpdate init.d/rpcsvcgssd init.d/sysstat init.d/cgred init.d/ip6tables init.d/netconsole init.d/oddjobd init.d/rsyslog init.d/udev-post
Linux Standard Base
Linux Standard Base (LSB) fut introduit par le Linux Foundation dans un but de permettre la portabilité des scripts init entre distributions différentes.
Les scripts init qui sont conformes au standard LSB doivent fournir :
- au moins les actions start, stop, restart, force-reload et status,
- des codes retours standardisés,
- des informations sur des dépendances.
Les scripts init conforment au standard LSB peuvent aussi fournir :
- les actions reload et try-restart,
- des messages de journalisation en utilisant les fonctions Init.d log_success_msg, log_failure_msg et log_warning_msg.
Les fonctions proposées par défaut par LSB sont contenues dans le fichier /lib/lsb/init-functions :
[root@centos5 ~]# cat /lib/lsb/init-functions #!/bin/sh # LSB initscript functions, as defined in the LSB Spec 1.1.0 # # Lawrence Lim <llim@redhat.com> - Tue, 26 June 2007 # Updated to the latest LSB 3.1 spec # http://refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic_lines.txt start_daemon () { /etc/redhat-lsb/lsb_start_daemon "$@" } killproc () { /etc/redhat-lsb/lsb_killproc "$@" } pidofproc () { /etc/redhat-lsb/lsb_pidofproc "$@" } log_success_msg () { /etc/redhat-lsb/lsb_log_message success "$@" } log_failure_msg () { /etc/redhat-lsb/lsb_log_message failure "$@" } log_warning_msg () { /etc/redhat-lsb/lsb_log_message warning "$@" }
Ces fonctions sont des scripts se trouvant dans le répertoire /etc/redhat-lsb :
[root@centos5 ~]# ls -l /etc/redhat-lsb/ total 16 -rwxr-xr-x. 1 root root 70 22 févr. 2013 lsb_killproc -rwxr-xr-x. 1 root root 243 22 févr. 2013 lsb_log_message -rwxr-xr-x. 1 root root 59 22 févr. 2013 lsb_pidofproc -rwxr-xr-x. 1 root root 650 22 févr. 2013 lsb_start_daemon
L'examen de ces scripts nous démontre que le système appelle le fichier /etc/init.d/functions :
[root@centos5 ~]# cat /etc/redhat-lsb/lsb_killproc #!/bin/bash . /etc/init.d/functions LSB=LSB-1.1 killproc $* exit $? [root@centos ~]# [root@centos ~]# cat /etc/redhat-lsb/lsb_pidofproc #!/bin/bash . /etc/init.d/functions pidofproc $* exit $?
Le fichier /etc/init.d/functions contient les fonctions à exécuter, par exemple :
... # A function to stop a program. killproc() { local RC killlevel= base pid pid_file= delay try binary= RC=0; delay=3; try=0 # Test syntax. if [ "$#" -eq 0 ]; then echo $"Usage: killproc [-p pidfile] [ -d delay] {program} [-signal]" return 1 fi if [ "$1" = "-p" ]; then pid_file=$2 shift 2 fi if [ "$1" = "-b" ]; then if [ -z $pid_file ]; then echo $"-b option can be used only with -p" echo $"Usage: killproc -p pidfile -b binary program" return 1 fi binary=$2 shift 2 fi if [ "$1" = "-d" ]; then delay=$(echo $2 | awk -v RS=' ' -v IGNORECASE=1 '{if($1!~/^[0-9.]+[smhd]?$/) exit 1;d=$1~/s$|^[0-9.]*$/?1:$1~/m$/?60:$1~/h$/?60*60:$1~/d$/?24*60*60:-1;if(d==-1) exit 1;delay+=d*$1} END {printf("%d",delay+0.5)}') if [ "$?" -eq 1 ]; then echo $"Usage: killproc [-p pidfile] [ -d delay] {program} [-signal]" return 1 fi shift 2 ...
et
... pidofproc() { local RC pid pid_file= # Test syntax. if [ "$#" = 0 ]; then echo $"Usage: pidofproc [-p pidfile] {program}" return 1 fi if [ "$1" = "-p" ]; then pid_file=$2 shift 2 fi fail_code=3 # "Program is not running" # First try "/var/run/*.pid" files __pids_var_run "$1" "$pid_file" RC=$? if [ -n "$pid" ]; then echo $pid return 0 fi [ -n "$pid_file" ] && return $RC __pids_pidof "$1" || return $RC } ...
Codes Retour Standardisés
Les codes retour standardisés sont :
Code Retour | Description |
---|---|
0 | Le programme fonctionne et le service est correctement démarré |
1 | Le programme est mort et le fichier pid dans /var/run existe |
2 | Le programme est mort et le fichier verrou dans /var/lock existe |
3 | Le programme ne fonctionne pas et le service n'est pas correctement démarré |
4 | Le statut du programme ou du service est inconnu |
5 - 99 | Réservés pour LSB |
100-149 | Réserves pour la distribution |
150-199 | Réservés pour l'application |
200-254 | Réservés |
Scripts
LSB stipule un format rigide de script qui commence par une section délimitée par deux clauses :
- ### BEGIN INIT INFO,
- ### END INIT INFO.
Par exemple :
[root@centos5 ~]# more /etc/rc.d/init.d/sshd #!/bin/bash # # sshd Start up the OpenSSH server daemon # # chkconfig: 2345 55 25 # description: SSH is a protocol for secure remote shell access. \ # This service starts up the OpenSSH server daemon. # # processname: sshd # config: /etc/ssh/ssh_host_key # config: /etc/ssh/ssh_host_key.pub # config: /etc/ssh/ssh_random_seed # config: /etc/ssh/sshd_config # pidfile: /var/run/sshd.pid ### BEGIN INIT INFO # Provides: sshd # Required-Start: $local_fs $network $syslog # Required-Stop: $local_fs $syslog # Should-Start: $syslog # Should-Stop: $network $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start up the OpenSSH server daemon # Description: SSH is a protocol for secure remote shell access. # This service starts up the OpenSSH server daemon. ### END INIT INFO # source function library . /etc/rc.d/init.d/functions # pull in sysconfig settings [ -f /etc/sysconfig/sshd ] && . /etc/sysconfig/sshd --Plus--(20%)
Les lignes se trouvant entre les deux clauses ont un format spécifique :
# {MotClef}: valeur1 [valeur2...]
Important : Notez qu'à part la deuxième ligne de la description, chaque ligne doit commencer par le caractère # suivi par un espace.
Les Mots Clefs sont :
Mot Clef | Description |
---|---|
Provides | Indique le service -(boot facilities en anglais) démarré par le script. Le nom doit être unique. |
Required-start | Indique d'autres services qui doivent être démarrés avant le démarrage de celui indiqué par le mot-clef Provides. |
Required-Stop | Indique d'autres services qui doivent être arrêtés après l'arrêt de celui indiqué par le mot-clef Provides. |
Should-Start | Indique d'autres services qui, s'ils sont présents sur le système, être démarrés avant le démarrage de celui indiqué par le mot-clef Provides. |
Should-Stop | Indique d'autres services qui, s'ils sont présents sur le système, doivent être arrêtés après l'arrêt de celui indiqué par le mot-clef Provides. |
Default-Start | Indique les niveaux d'exécution dans lesquels le service doit être démarré. |
Default-Stop | Indique les niveaux d'exécution dans lesquels le service doit être arrêté. |
Short-Description | Indique une description du service en une seule ligne. |
Description | Indique une description multi-lignes du service. |
Il existe des groupements de services, appelés en anglais des Virtual Facilities. Les plus importants sont :
Virtual Facility | Description |
---|---|
$local_fs | Tous les systèmes de fichiers locaux doivent être montés. |
$network | La carte Ethernet doit fonctionner |
$named | Les daemons, si présents, responsables de la résolution des noms tels DNS, NIS+ ou LDAP doivent être démarrés. |
$portmap | Les daemons qui fournissent le SunRPC/ONCRPC port mapping doivent être démarrés. |
$remote_fs | Tous les systèmes de fichiers doivent être montés. |
$syslog | Syslog, Syslog-ng ou Rsyslog doit être démarré. |
$time | L'heure du système doit avoir été fixé soit par NTP, soit par rdate soit par l'horloge système. |
Répertoires rcx.d
Les répertoires rc0.d à rc6.d contiennent des liens vers les scripts du répertoire init.d.
Pour mieux comprendre, saisissez les commandes suivantes :
[root@centos5 rc.d]# for rep in rc[345].d; do echo "dans $rep :"; ls $rep/S*; done dans rc3.d : rc3.d/S00microcode_ctl rc3.d/S10network rc3.d/S13irqbalance rc3.d/S24avahi-daemon rc3.d/S25netfs rc3.d/S30vboxadd rc3.d/S80postfix rc3.d/S01sysstat rc3.d/S11auditd rc3.d/S13rpcbind rc3.d/S24nfslock rc3.d/S26acpid rc3.d/S30vboxadd-x11 rc3.d/S82abrtd rc3.d/S02lvm2-monitor rc3.d/S11portreserve rc3.d/S15mdmonitor rc3.d/S24rpcgssd rc3.d/S26haldaemon rc3.d/S35vboxadd-service rc3.d/S90crond rc3.d/S08ip6tables rc3.d/S12rsyslog rc3.d/S22messagebus rc3.d/S24rpcidmapd rc3.d/S26udev-post rc3.d/S50bluetooth rc3.d/S95atd rc3.d/S08iptables rc3.d/S13cpuspeed rc3.d/S23NetworkManager rc3.d/S25cups rc3.d/S28autofs rc3.d/S55sshd rc3.d/S99local dans rc4.d : rc4.d/S00microcode_ctl rc4.d/S10network rc4.d/S13irqbalance rc4.d/S24avahi-daemon rc4.d/S25netfs rc4.d/S30vboxadd rc4.d/S90crond rc4.d/S01sysstat rc4.d/S11auditd rc4.d/S13rpcbind rc4.d/S24nfslock rc4.d/S26acpid rc4.d/S35vboxadd-service rc4.d/S95atd rc4.d/S02lvm2-monitor rc4.d/S11portreserve rc4.d/S15mdmonitor rc4.d/S24rpcgssd rc4.d/S26haldaemon rc4.d/S50bluetooth rc4.d/S99local rc4.d/S08ip6tables rc4.d/S12rsyslog rc4.d/S22messagebus rc4.d/S24rpcidmapd rc4.d/S26udev-post rc4.d/S55sshd rc4.d/S08iptables rc4.d/S13cpuspeed rc4.d/S23NetworkManager rc4.d/S25cups rc4.d/S28autofs rc4.d/S80postfix dans rc5.d : rc5.d/S00microcode_ctl rc5.d/S10network rc5.d/S13irqbalance rc5.d/S24avahi-daemon rc5.d/S25netfs rc5.d/S30vboxadd rc5.d/S80postfix rc5.d/S01sysstat rc5.d/S11auditd rc5.d/S13rpcbind rc5.d/S24nfslock rc5.d/S26acpid rc5.d/S30vboxadd-x11 rc5.d/S82abrtd rc5.d/S02lvm2-monitor rc5.d/S11portreserve rc5.d/S15mdmonitor rc5.d/S24rpcgssd rc5.d/S26haldaemon rc5.d/S35vboxadd-service rc5.d/S90crond rc5.d/S08ip6tables rc5.d/S12rsyslog rc5.d/S22messagebus rc5.d/S24rpcidmapd rc5.d/S26udev-post rc5.d/S50bluetooth rc5.d/S95atd rc5.d/S08iptables rc5.d/S13cpuspeed rc5.d/S23NetworkManager rc5.d/S25cups rc5.d/S28autofs rc5.d/S55sshd rc5.d/S99local
Important : Notez que chaque répertoire correspondant à un niveau d'exécution contient des liens pointant vers un script dans le répertoire /etc/init.d. La lettre S indique au script rc que le script dans /etc/rc.d/init.d doit être exécutée avec l'option start. De cette façon les processus sont lancés dans le niveau d'exécution spécifié. Le numéro qui suit la lettre S indique l'ordre de lancement par le script rc. Si deux scripts dans un répertoire /etc/rc.d/rcX.d ont le même numéro, l'ordre alphabétique prime. Notez aussi la présence du lien S99local qui lance le script rc.local en dernier. Le script rc.local est lancé dans les niveaux d'exécution 2, 3, 4 et 5. C'est dans ce script que root peut ajouter des commandes.
Rappelez la commande précédente et modifiez la lettre S en K :
[root@centos5 rc.d]# for rep in rc[345].d; do echo "dans $rep :"; ls $rep/K*; done dans rc3.d : rc3.d/K01certmonger rc3.d/K10saslauthd rc3.d/K50snmpd rc3.d/K73ypbind rc3.d/K80kdump rc3.d/K87restorecond rc3.d/K95firstboot rc3.d/K01smartd rc3.d/K15httpd rc3.d/K50snmptrapd rc3.d/K74nscd rc3.d/K80sssd rc3.d/K88nslcd rc3.d/K02oddjobd rc3.d/K50dnsmasq rc3.d/K60nfs rc3.d/K74ntpd rc3.d/K84wpa_supplicant rc3.d/K89rdisc rc3.d/K10psacct rc3.d/K50netconsole rc3.d/K69rpcsvcgssd rc3.d/K75ntpdate rc3.d/K86cgred rc3.d/K95cgconfig dans rc4.d : rc4.d/K01certmonger rc4.d/K10saslauthd rc4.d/K50netconsole rc4.d/K69rpcsvcgssd rc4.d/K74ntpd rc4.d/K84wpa_supplicant rc4.d/K89rdisc rc4.d/K01smartd rc4.d/K15httpd rc4.d/K50snmpd rc4.d/K70vboxadd-x11 rc4.d/K75ntpdate rc4.d/K86cgred rc4.d/K95cgconfig rc4.d/K02oddjobd rc4.d/K16abrtd rc4.d/K50snmptrapd rc4.d/K73ypbind rc4.d/K80kdump rc4.d/K87restorecond rc4.d/K95firstboot rc4.d/K10psacct rc4.d/K50dnsmasq rc4.d/K60nfs rc4.d/K74nscd rc4.d/K80sssd rc4.d/K88nslcd dans rc5.d : rc5.d/K01certmonger rc5.d/K10saslauthd rc5.d/K50snmpd rc5.d/K73ypbind rc5.d/K80kdump rc5.d/K87restorecond rc5.d/K95firstboot rc5.d/K01smartd rc5.d/K15httpd rc5.d/K50snmptrapd rc5.d/K74nscd rc5.d/K80sssd rc5.d/K88nslcd rc5.d/K02oddjobd rc5.d/K50dnsmasq rc5.d/K60nfs rc5.d/K74ntpd rc5.d/K84wpa_supplicant rc5.d/K89rdisc rc5.d/K10psacct rc5.d/K50netconsole rc5.d/K69rpcsvcgssd rc5.d/K75ntpdate rc5.d/K86cgred rc5.d/K95cgconfig
Important : Ici le principe est le même sauf que la lettre K indique au script rc que le script dans /etc/rc.d/init.d doit être lancé avec l'option stop.
rc.local
Le script rc.local est lancé dans les niveaux d'exécution 2, 3, 4 et 5. C'est dans ce script que root peut ajouter des commandes.
La Commande chkconfig
Pour avoir une vue globale des services lancés par niveau d'exécution nous pouvons utiliser la commande chkconfig. Saisissez la commande suivante :
[root@centos5 rc.d]# chkconfig --list NetworkManager 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt abrtd 0:arrêt 1:arrêt 2:arrêt 3:marche 4:arrêt 5:marche 6:arrêt acpid 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt atd 0:arrêt 1:arrêt 2:arrêt 3:marche 4:marche 5:marche 6:arrêt auditd 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt autofs 0:arrêt 1:arrêt 2:arrêt 3:marche 4:marche 5:marche 6:arrêt avahi-daemon 0:arrêt 1:arrêt 2:arrêt 3:marche 4:marche 5:marche 6:arrêt bluetooth 0:arrêt 1:arrêt 2:arrêt 3:marche 4:marche 5:marche 6:arrêt certmonger 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt cgconfig 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt cgred 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt cpuspeed 0:arrêt 1:marche 2:marche 3:marche 4:marche 5:marche 6:arrêt crond 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt cups 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt dnsmasq 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt firstboot 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt haldaemon 0:arrêt 1:arrêt 2:arrêt 3:marche 4:marche 5:marche 6:arrêt httpd 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt ip6tables 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt iptables 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt irqbalance 0:arrêt 1:arrêt 2:arrêt 3:marche 4:marche 5:marche 6:arrêt kdump 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt lvm2-monitor 0:arrêt 1:marche 2:marche 3:marche 4:marche 5:marche 6:arrêt mdmonitor 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt messagebus 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt microcode_ctl 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt netconsole 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt netfs 0:arrêt 1:arrêt 2:arrêt 3:marche 4:marche 5:marche 6:arrêt network 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt nfs 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt nfslock 0:arrêt 1:arrêt 2:arrêt 3:marche 4:marche 5:marche 6:arrêt nscd 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt nslcd 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt ntpd 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt ntpdate 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt oddjobd 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt portreserve 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt postfix 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt psacct 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt rdisc 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt restorecond 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt rpcbind 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt rpcgssd 0:arrêt 1:arrêt 2:arrêt 3:marche 4:marche 5:marche 6:arrêt rpcidmapd 0:arrêt 1:arrêt 2:arrêt 3:marche 4:marche 5:marche 6:arrêt rpcsvcgssd 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt rsyslog 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt saslauthd 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt smartd 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt snmpd 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt snmptrapd 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt sshd 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt sssd 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt sysstat 0:arrêt 1:marche 2:marche 3:marche 4:marche 5:marche 6:arrêt udev-post 0:arrêt 1:marche 2:marche 3:marche 4:marche 5:marche 6:arrêt vboxadd 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt vboxadd-service 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt vboxadd-x11 0:arrêt 1:arrêt 2:arrêt 3:marche 4:arrêt 5:marche 6:arrêt wpa_supplicant 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt ypbind 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt
Options de la commande
Les options de la commande chkconfig sont :
[root@centos5 ~]# chkconfig --help chkconfig version 1.3.47 - Copyright (C) 1997-2000 Red Hat, Inc. Ce logiciel peut être librement distribué selon les termes de la licence publique GNU (GPL). utilisation : chkconfig [--list] [--type <type>] [nom] chkconfig --add <nom> chkconfig --del <nom> chkconfig --override <name> chkconfig [--level <niveaux>] [--type <type>] <nom> <on|off|reset|resetpriorities>
Les options les plus importantes sont :
Option | Description |
---|---|
- -add (nom) | Permet d'ajouter un service aux runlevels définis par le service lui-même |
- -del (nom) | Permet de supprimer un service aux runlevels définis par le service lui-même |
- -level [niveau] (nom) [on|off|reset] | Permet d'activer, de désactiver ou de réinitialiser un service inscrit |
Démarrer RHEL/CentOS 6 avec Upstart
Upstart est un processus Init mieux adapté aux exigences des périphériques modernes de type plug'n'play. Upstart peux faire tout ce que fait le processus Init SysVinit mais supporte d'avantage d'actions. Par exemple, Upstart est capable de démarrer un service quand un périphérique spécifique est branché à chaud. Upstart est néanmoins compatible avec les scripts de démarrage du système SysVinit et ceux-ci fonctionnement normalement en attendant que les éditeurs de logiciels tierces portent les scripts SysVinit vers Upstart.
Inittab
Sous Upstart, le fichier /etc/inittab ne permet plus de définir les services à démarrer en fonction du RUNLEVEL, seule la définition d'initdefault y est spécifiée :
[root@centos6 ~]# cat /etc/inittab # inittab is only used by upstart for the default runlevel. # # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # System initialization is started by /etc/init/rcS.conf # # Individual runlevels are started by /etc/init/rc.conf # # Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf # # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf, # with configuration in /etc/sysconfig/init. # # For information on how to write upstart event handlers, or how # upstart works, see init(5), init(8), and initctl(8). # # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:5:initdefault:
[root@centos6 ~]# cat /etc/inittab # inittab is only used by upstart for the default runlevel. # # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # System initialization is started by /etc/init/rcS.conf # # Individual runlevels are started by /etc/init/rc.conf # # Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf # # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf, # with configuration in /etc/sysconfig/init. # # For information on how to write upstart event handlers, or how # upstart works, see init(5), init(8), and initctl(8). # # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:5:initdefault:
Sous Upstart, les définitions des autres valeurs habituellement incluses dans /etc/inittab se trouvent dans des fichiers de configuration supplémentaires qui se trouvent dans le répertoire /etc/init/ :
[root@centos6 ~]# ls -l /etc/init total 68 -rw-r--r--. 1 root root 412 22 juil. 2014 control-alt-delete.conf -rw-r--r--. 1 root root 130 12 mars 2014 init-system-dbus.conf -rw-r--r--. 1 root root 463 22 juil. 2014 kexec-disable.conf -rw-r--r--. 1 root root 560 22 juil. 2014 plymouth-shutdown.conf -rw-r--r--. 1 root root 357 22 juil. 2014 prefdm.conf -rw-r--r--. 1 root root 505 22 juil. 2014 quit-plymouth.conf -rw-r--r--. 1 root root 417 22 juil. 2014 rc.conf -rw-r--r--. 1 root root 1046 22 juil. 2014 rcS.conf -rw-r--r--. 1 root root 430 22 juil. 2014 rcS-emergency.conf -rw-r--r--. 1 root root 725 22 juil. 2014 rcS-sulogin.conf -rw-r--r--. 1 root root 2915 23 nov. 2013 readahead-collector.conf -rw-r--r--. 1 root root 1559 23 nov. 2013 readahead.conf -rw-r--r--. 1 root root 726 23 nov. 2013 readahead-disable-services.conf -rw-r--r--. 1 root root 1302 22 juil. 2014 serial.conf -rw-r--r--. 1 root root 791 22 juil. 2014 splash-manager.conf -rw-r--r--. 1 root root 473 22 juil. 2014 start-ttys.conf -rw-r--r--. 1 root root 335 22 juil. 2014 tty.conf
Initialisation du Système
L'initialisation du système est configurée dans le fichier /etc/init/rcS.conf :
[root@centos6 init]# cat /etc/init/rcS.conf # rcS - runlevel compatibility # # This task runs the old sysv-rc startup scripts. start on startup stop on runlevel task # Note: there can be no previous runlevel here, if we have one it's bad # information (we enter rc1 not rcS for maintenance). Run /etc/rc.d/rc # without information so that it defaults to previous=N runlevel=S. console output exec /etc/rc.d/rc.sysinit post-stop script if [ "$UPSTART_EVENTS" = "startup" ]; then [ -f /etc/inittab ] && runlevel=$(/bin/awk -F ':' '$3 == "initdefault" && $1 !~ "^#" { print $2 }' /etc/inittab) [ -z "$runlevel" ] && runlevel="3" for t in $(cat /proc/cmdline); do case $t in -s|single|S|s) runlevel="S" ;; [1-9]) runlevel="$t" ;; esac done exec telinit $runlevel fi end script
Runlevels
La gestion des Runlevels est configurée dans le fichier /etc/init/rc.conf :
[root@centos6 init]# cat /etc/init/rc.conf # rc - System V runlevel compatibility # # This task runs the old sysv-rc runlevel scripts. It # is usually started by the telinit compatibility wrapper. start on runlevel [0123456] stop on runlevel [!$RUNLEVEL] task export RUNLEVEL console output exec /etc/rc.d/rc $RUNLEVEL
[CTL]-[ALT]-[DEL]
Le comportement associé avec la combinaison de touches [CTL]-[ALT]-[DEL] est configuré dans le fichier /etc/init/control-alt-delete.conf :
[root@centos6 init]# cat /etc/init/control-alt-delete.conf # control-alt-delete - emergency keypress handling # # This task is run whenever the Control-Alt-Delete key combination is # pressed. Usually used to shut down the machine. start on control-alt-delete exec /sbin/shutdown -r now "Control-Alt-Delete pressed"
mingetty
Le génération des terminaux getty est spécifiée dans les fichiers /etc/init/tty.conf et /etc/init/serial.conf :
[root@centos6 init]# cat /etc/init/tty.conf # tty - getty # # This service maintains a getty on the sepcified device. stop on runlevel [016] respawn instance $TTY exec /sbin/mingetty $TTY [root@centos rc.d]# cat /etc/init/serial.conf # Automatically start a configured serial console # # How this works: # # On boot, a udev helper examines /dev/console. If a serial console is the # primary console (last console on the commandline in grub), the event # 'fedora.serial-console-available <port name> <speed>' is emitted, which # triggers this script. It waits for the runlevel to finish, ensures # the proper port is in /etc/securetty, and starts the getty. # # If your serial console is not the primary console, or you want a getty # on serial even if it's not the console, create your own event by copying # /etc/init/tty.conf, and changing the getty line in that file. start on fedora.serial-console-available DEV=* and stopped rc RUNLEVEL=[2345] stop on runlevel [016] instance $DEV respawn pre-start exec /sbin/securetty $DEV exec /sbin/agetty /dev/$DEV $SPEED vt100-nav
La configuration des terminaux fait partie du fichier /etc/sysconfig/init
[root@centos6 init]# cat /etc/sysconfig/init # color => new RH6.0 bootup # verbose => old-style bootup # anything else => new style bootup without ANSI colors or positioning BOOTUP=color # column to start "[ OK ]" label in RES_COL=60 # terminal sequence to move to that column. You could change this # to something like "tput hpa ${RES_COL}" if your terminal supports it MOVE_TO_COL="echo -en \\033[${RES_COL}G" # terminal sequence to set color to a 'success' color (currently: green) SETCOLOR_SUCCESS="echo -en \\033[0;32m" # terminal sequence to set color to a 'failure' color (currently: red) SETCOLOR_FAILURE="echo -en \\033[0;31m" # terminal sequence to set color to a 'warning' color (currently: yellow) SETCOLOR_WARNING="echo -en \\033[0;33m" # terminal sequence to reset to the default color. SETCOLOR_NORMAL="echo -en \\033[0;39m" # Set to anything other than 'no' to allow hotkey interactive startup... PROMPT=yes # Set to 'yes' to allow probing for devices with swap signatures AUTOSWAP=no # What ttys should gettys be started on? ACTIVE_CONSOLES=/dev/tty[1-6] # Set to '/sbin/sulogin' to prompt for password on single-user mode # Set to '/sbin/sushell' otherwise SINGLE=/sbin/sushell
Gestion des Services
Sous Upstart, les services sont appelés des jobs. Les scripts de démarrage de jobs au format Upstart sont placés dans le répertoire /etc/init/ et ont une forme nom.conf où nom est le nom du job :
[root@centos6 ~]# ls /etc/init control-alt-delete.conf rcS-sulogin.conf init-system-dbus.conf readahead-collector.conf kexec-disable.conf readahead.conf plymouth-shutdown.conf readahead-disable-services.conf prefdm.conf serial.conf quit-plymouth.conf splash-manager.conf rc.conf start-ttys.conf rcS.conf tty.conf rcS-emergency.conf
Pour créer un fichier job, il convient de respecter un certain format. Par exemple créez le fichier /etc/init/testjob.conf :
- testjob.conf
description "Un job pour tester Upstart" author "Linux E-Learning" start on runlevel [2345] exec echo Le job test a été lancé le `date` >> /var/log/testjob.log
La Commande initctl
Pour obtenir une liste de tous les jobs et leurs états, il convient d'utiliser la commande initctl. Vérifiez donc que le job testjob se trouve dans la sortie de cette commande :
[root@centos6 ~]# initctl list rc stop/waiting tty (/dev/tty3) start/running, process 1833 tty (/dev/tty2) start/running, process 1828 tty (/dev/tty6) start/running, process 1854 tty (/dev/tty5) start/running, process 1845 tty (/dev/tty4) start/running, process 1838 plymouth-shutdown stop/waiting control-alt-delete stop/waiting rcS-emergency stop/waiting readahead-collector stop/waiting kexec-disable stop/waiting quit-plymouth stop/waiting testjob stop/waiting rcS stop/waiting prefdm start/running, process 1814 init-system-dbus stop/waiting readahead stop/waiting splash-manager stop/waiting start-ttys stop/waiting readahead-disable-services stop/waiting rcS-sulogin stop/waiting serial stop/waiting
Option de la Commande initctl
Les options de la commande initctl sont :
[root@centos6 ~]# initctl --help Usage: initctl [OPTION]... COMMAND [OPTION]... [ARG]... Options: --system use D-Bus system bus to connect to init daemon --dest=NAME destination well-known name on system bus -q, --quiet reduce output to errors only -v, --verbose increase output to include informational messages --help display this help and exit --version output version information and exit For a list of commands, try `initctl help'. Report bugs at <https://launchpad.net/upstart/+bugs>
Jobs
Il existe trois types de jobs sous Upstart :
- task
- service
- un service job peut fonctionner en arrière plan
- abstract
- un abstract job est un service qui fonctionnent jusqu'à ce que l'administrateur l'arrête
Événements
Un événement ou event en anglais est un signal envoyé vers un job pour déclencher une action. Par exemple :
- starting
- started
- stopping
- stopped
Etats
L'objectif d'un job est de démarrer ou de s'arrêter. Entre ces deux objectifs se trouvent des états intermédiaires :
- waiting - l'état initial d'un job
- starting - le job est sur le point de démarrer
- pre-start - la section pre-start est chargée
- spawned - une section script est sur le point de démarrer
- post-start - les opérations détaillées dans la section post-start ont lieu
- running - le job est opérationnel
- pre-stop - la section pre-stop est chargée
- stopping - le job est en cours d'arrêt
- killed - le job est arrêté
- post-stop - les opérations détaillées dans la section post-stop ont lieu
Démarrer et Arrêter les Jobs
Compte tenu de la compatibilité avec le système SysVinit, les commandes traditionnellement utilisées avec ce dernier sont compris par Upstart. Ceci étant Upstart fournit ses propres commandes pour le contrôle des jobs.
La Commande status
Pour voir le status d'un job spécifique, utilisez la commande suivante :
[root@centos6 ~]# status testjob testjob stop/waiting
Options de la Commande status
Les options de la commande status sont :
[root@centos6 ~]# status --help Usage: status [OPTION]... JOB [KEY=VALUE]... Query status of job. Options: --system use D-Bus system bus to connect to init daemon --dest=NAME destination well-known name on system bus -q, --quiet reduce output to errors only -v, --verbose increase output to include informational messages --help display this help and exit --version output version information and exit JOB is the name of the job that is to be queried, this may be followed by zero or more environment variables to distguish between job instances. Report bugs at <https://launchpad.net/upstart/+bugs>
La Commande start
[root@centos6 ~]# start testjob testjob start/running, process 2981 [root@centos ~]# cat /var/log/testjob.log Le job test a été lancé le Tue Jun 30 15:26:10 CEST 2015
Options de la Commande start
Les options de la commande start sont :
[root@centos6 ~]# start --help Usage: start [OPTION]... JOB [KEY=VALUE]... Start job. Options: -n, --no-wait do not wait for job to start before exiting --system use D-Bus system bus to connect to init daemon --dest=NAME destination well-known name on system bus -q, --quiet reduce output to errors only -v, --verbose increase output to include informational messages --help display this help and exit --version output version information and exit JOB is the name of the job that is to be started, this may be followed by zero or more environment variables to be defined in the new job. The environment may also serve to distinguish between job instances, and thus decide whether a new instance will be started or an error returned if an existing instance is already running. Report bugs at <https://launchpad.net/upstart/+bugs>
La Commande stop
Pour arrêter un job, utilisez la commande stop.
Options de la Commande stop
Les options de la commande stop sont :
[root@centos6 ~]# stop --help Usage: stop [OPTION]... JOB [KEY=VALUE]... Stop job. Options: -n, --no-wait do not wait for job to stop before exiting --system use D-Bus system bus to connect to init daemon --dest=NAME destination well-known name on system bus -q, --quiet reduce output to errors only -v, --verbose increase output to include informational messages --help display this help and exit --version output version information and exit JOB is the name of the job that is to be stopped, this may be followed by zero or more environment variables to be passed to the job's pre-stop and post-stop processes. The environment also serves to distinguish between job instances, and thus decide which of multiple instances will be stopped. Report bugs at <https://launchpad.net/upstart/+bugs>
La Commande restart
Pour redémarrer un job, utilisez la commande restart.
Options de la Commande restart
Les options de la commande restart sont :
[root@centos6 ~]# restart --help Usage: restart [OPTION]... JOB [KEY=VALUE]... Restart job. Options: -n, --no-wait do not wait for job to restart before exiting --system use D-Bus system bus to connect to init daemon --dest=NAME destination well-known name on system bus -q, --quiet reduce output to errors only -v, --verbose increase output to include informational messages --help display this help and exit --version output version information and exit JOB is the name of the job that is to be restarted, this may be followed by zero or more environment variables to be defined in the job after restarting. The environment also serves to distinguish between job instances, and thus decide which of multiple instances will be restarted. Report bugs at <https://launchpad.net/upstart/+bugs>
Il est aussi possible d'utiliser les commandes initctl start, initctl stop et initctl restart pour gérer les jobs.
Démarrer RHEL/CentOS 7
RHEL/CentOS 7, comme beaucoup d'autres distributions, ont abandonné Upstart pour Systemd. Ce dernier prend une approche différente au démarrage de Linux. En effet, SysVinit et Upstart sont des systèmes de démarrage séquentiels. Systemd essaie, par contre, de démarrer autant de services en parallèle que possible. Ceci est rendu possible car la majorité d'architectures matérielles modernes sont multi-cœurs. Si un service dépend d'un autre qui n'est pas encore démarré ce premier est mis en attente dans une mémoire tampon. Qui plus est, les services qui ne sont pas nécessaires au démarrage de la machine, tel cups, ne sont démarrés ultérieurement que si nécessaire. Lors de démarrage, les partitions sont montées en parallèle. Dernièrement, Systemd remplace les scripts de démarrage traditionnels avec des binaires compilés, beaucoup plus rapides que leur prédécesseurs.
Au lieu de parler de scripts de démarrage et de niveaux d'exécution, Systemd utilise la terminologie Unités (Units) et Cibles (Targets). Une Cible est en quelque sorte une grande étape dans le démarrage du système tandis qu'une Unité peut être :
- un automount - (.automount),
- une périphérique - Device - (.device),
- un montage d'un périphérique - Mount - (.mount),
- un chemin - Path - (.path)
- un socket - Socket - (.socket),
- un service - Service - (.service),
- une instantanée - Snapshot - (.snapshot),
- une cible - Target - (.target).
Important : Dans le contexte d'une Unité, le type cible regroupe des Unités multiples afin qu'elles puissent être démarrées en même temps. Par exemple network.target regroupe toutes les Unités nécessaires pour démarrer toutes les interfaces réseaux en même temps.
La Commande systemctl
Pour visualiser la liste des Unités, il convient d'utiliser la commande systemctl avec l'option list-units :
[root@centos7 ~]# systemctl list-units UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Executable File Formats File System Automount Point sys-devices-pci0000:...t1-target1:0:0-1:0:0:0-block-sr0.device loaded active plugged VBOX_CD-ROM sys-devices-pci0000:00-0000:00:03.0-net-enp0s3.device loaded active plugged PRO/1000 MT Desktop Adapter sys-devices-pci0000:00-0000:00:05.0-sound-card0.device loaded active plugged 82801AA AC'97 Audio Controller sys-devices-pci0000:...rget2:0:0-2:0:0:0-block-sda-sda1.device loaded active plugged VBOX_HARDDISK sys-devices-pci0000:...rget2:0:0-2:0:0:0-block-sda-sda2.device loaded active plugged VBOX_HARDDISK sys-devices-pci0000:...rget2:0:0-2:0:0:0-block-sda-sda3.device loaded active plugged VBOX_HARDDISK sys-devices-pci0000:...t2-target2:0:0-2:0:0:0-block-sda.device loaded active plugged VBOX_HARDDISK sys-devices-platform-serial8250-tty-ttyS0.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS0 sys-devices-platform-serial8250-tty-ttyS1.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS1 sys-devices-platform-serial8250-tty-ttyS2.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS2 sys-devices-platform-serial8250-tty-ttyS3.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS3 sys-module-configfs.device loaded active plugged /sys/module/configfs sys-module-fuse.device loaded active plugged /sys/module/fuse sys-subsystem-net-devices-enp0s3.device loaded active plugged PRO/1000 MT Desktop Adapter -.mount loaded active mounted / boot.mount loaded active mounted /boot dev-hugepages.mount loaded active mounted Huge Pages File System dev-mqueue.mount loaded active mounted POSIX Message Queue File System proc-fs-nfsd.mount loaded active mounted NFSD configuration filesystem run-media-trainee-VBOXADDITIONS_4.3.28_100309.mount loaded active mounted /run/media/trainee/VBOXADDITIONS_4.3.28_100309 run-user-1000-gvfs.mount loaded active mounted /run/user/1000/gvfs sys-fs-fuse-connections.mount loaded active mounted FUSE Control File System sys-kernel-config.mount loaded active mounted Configuration File System sys-kernel-debug.mount loaded active mounted Debug File System var-lib-nfs-rpc_pipefs.mount loaded active mounted RPC Pipe File System brandbot.path loaded active waiting Flexible branding cups.path loaded active waiting CUPS Printer Service Spool systemd-ask-password-plymouth.path loaded active waiting Forward Password Requests to Plymouth Directory Watch systemd-ask-password-wall.path loaded active waiting Forward Password Requests to Wall Directory Watch session-1.scope loaded active running Session 1 of user trainee 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 Tool accounts-daemon.service loaded active running Accounts Service alsa-state.service loaded active running Manage Sound Card State (restore and store) 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 chronyd.service loaded active running NTP client/server colord.service loaded active running Manage, Install and Generate Color Profiles crond.service loaded active running Command Scheduler cups.service loaded active running CUPS Printing Service dbus.service loaded active running D-Bus System Message Bus firewalld.service loaded active running firewalld - dynamic firewall daemon gdm.service loaded active running GNOME Display Manager gssproxy.service loaded active running GSSAPI Proxy Daemon iscsi-shutdown.service loaded active exited Logout off all iSCSI sessions on shutdown kdump.service loaded failed failed Crash recovery kernel arming kmod-static-nodes.service loaded active exited Create list of required static device nodes for the current ker ksm.service loaded active exited Kernel Samepage Merging ksmtuned.service loaded active running Kernel Samepage Merging (KSM) Tuning Daemon libstoragemgmt.service loaded active running libstoragemgmt plug-in server daemon libvirtd.service loaded active running Virtualization daemon lvm2-lvmetad.service loaded active running LVM2 metadata daemon
Pour consulter la liste des Unités inactifs, utilisez la commande suivante :
[root@centos7 ~]# systemctl list-units --all | grep inactive | more proc-sys-fs-binfmt_misc.mount loaded inactive dead Arbitrary Executable File Formats File System systemd-ask-password-console.path loaded inactive dead Dispatch Password Requests to Cons ole Directory Watch abrt-vmcore.service loaded inactive dead Harvest vmcores for ABRT alsa-restore.service loaded inactive dead Restore Sound Card State alsa-store.service loaded inactive dead Store Sound Card State apparmor.service not-found inactive dead apparmor.service auth-rpcgss-module.service loaded inactive dead Kernel Module supporting RPCSEC_GS S brandbot.service loaded inactive dead Flexible Branding Service cpupower.service loaded inactive dead Configure CPU power related settin gs dm-event.service loaded inactive dead Device-mapper event daemon dmraid-activation.service loaded inactive dead Activation of DM RAID sets dracut-shutdown.service loaded inactive dead Restore /run/initramfs ebtables.service loaded inactive dead Ethernet Bridge Filtering tables emergency.service loaded inactive dead Emergency Shell exim.service not-found inactive dead exim.service getty@tty1.service loaded inactive dead Getty on tty1 hypervkvpd.service loaded inactive dead Hyper-V KVP daemon hypervvssd.service loaded inactive dead Hyper-V VSS daemon ip6tables.service loaded inactive dead IPv6 firewall with ip6tables iptables.service loaded inactive dead IPv4 firewall with iptables irqbalance.service loaded inactive dead irqbalance daemon iscsi.service loaded inactive dead Login and scanning of iSCSI device s iscsid.service loaded inactive dead Open-iSCSI iscsiuio.service loaded inactive dead iSCSI UserSpace I/O driver --More--
Pour consulter la liste des fichiers Unités, utilisez la commande suivante :
[root@centos7 ~]# systemctl list-unit-files | more UNIT FILE STATE proc-sys-fs-binfmt_misc.automount static dev-hugepages.mount static dev-mqueue.mount static proc-fs-nfsd.mount static proc-sys-fs-binfmt_misc.mount static sys-fs-fuse-connections.mount static sys-kernel-config.mount static sys-kernel-debug.mount static tmp.mount disabled var-lib-nfs-rpc_pipefs.mount static brandbot.path disabled cups.path enabled systemd-ask-password-console.path static systemd-ask-password-plymouth.path static systemd-ask-password-wall.path static session-1.scope static session-8.scope static abrt-ccpp.service enabled abrt-oops.service enabled abrt-pstoreoops.service disabled abrt-vmcore.service enabled abrt-xorg.service enabled abrtd.service enabled accounts-daemon.service enabled alsa-restore.service static alsa-state.service static alsa-store.service static anaconda-direct.service static --More--
Options de la Commande systemctl
Les options de la commande systemctl sont :
[root@centos7 ~]# systemctl --help systemctl [OPTIONS...] {COMMAND} ... Query or send control commands to the systemd manager. -h --help Show this help --version Show package version -t --type=TYPE List only units of a particular type --state=STATE List only units with particular LOAD or SUB or ACTIVE state -p --property=NAME Show only properties by this name -a --all Show all loaded units/properties, including dead/empty ones. To list all units installed on the system, use the 'list-unit-files' command instead. --reverse Show reverse dependencies with 'list-dependencies' -l --full Don't ellipsize unit names on output --fail When queueing a new job, fail if conflicting jobs are pending --irreversible When queueing a new job, make sure it cannot be implicitly cancelled --ignore-dependencies When queueing a new job, ignore all its dependencies --show-types When showing sockets, explicitly show their type -i --ignore-inhibitors When shutting down or sleeping, ignore inhibitors --kill-who=WHO Who to send signal to -s --signal=SIGNAL Which signal to send -H --host=[USER@]HOST Show information for remote host -P --privileged Acquire privileges before execution -q --quiet Suppress output --no-block Do not wait until operation finished --no-wall Don't send wall message before halt/power-off/reboot --no-reload When enabling/disabling unit files, don't reload daemon configuration --no-legend Do not print a legend (column headers and hints) --no-pager Do not pipe output into a pager --no-ask-password Do not ask for system passwords --system Connect to system manager --user Connect to user service manager --global Enable/disable unit files globally --runtime Enable unit files only temporarily until next reboot -f --force When enabling unit files, override existing symlinks When shutting down, execute action immediately --root=PATH Enable unit files in the specified root directory -n --lines=INTEGER Number of journal entries to show -o --output=STRING Change journal output mode (short, short-monotonic, verbose, export, json, json-pretty, json-sse, cat) --plain Print unit dependencies as a list instead of a tree Unit Commands: list-units List loaded units list-sockets List loaded sockets ordered by address start [NAME...] Start (activate) one or more units stop [NAME...] Stop (deactivate) one or more units reload [NAME...] Reload one or more units restart [NAME...] Start or restart one or more units try-restart [NAME...] Restart one or more units if active reload-or-restart [NAME...] Reload one or more units if possible, otherwise start or restart reload-or-try-restart [NAME...] Reload one or more units if possible, otherwise restart if active isolate [NAME] Start one unit and stop all others kill [NAME...] Send signal to processes of a unit is-active [NAME...] Check whether units are active is-failed [NAME...] Check whether units are failed status [NAME...|PID...] Show runtime status of one or more units show [NAME...|JOB...] Show properties of one or more units/jobs or the manager set-property [NAME] [ASSIGNMENT...] Sets one or more properties of a unit help [NAME...|PID...] Show manual for one or more units reset-failed [NAME...] Reset failed state for all, one, or more units list-dependencies [NAME] Recursively show units which are required or wanted by this unit or by which this unit is required or wanted Unit File Commands: list-unit-files List installed unit files enable [NAME...] Enable one or more unit files disable [NAME...] Disable one or more unit files reenable [NAME...] Reenable one or more unit files preset [NAME...] Enable/disable one or more unit files based on preset configuration is-enabled [NAME...] Check whether unit files are enabled mask [NAME...] Mask one or more units unmask [NAME...] Unmask one or more units link [PATH...] Link one or more units files into the search path get-default Get the name of the default target set-default NAME Set the default target Job Commands: list-jobs List jobs cancel [JOB...] Cancel all, one, or more jobs Snapshot Commands: snapshot [NAME] Create a snapshot delete [NAME...] Remove one or more snapshots Environment Commands: show-environment Dump environment set-environment [NAME=VALUE...] Set one or more environment variables unset-environment [NAME...] Unset one or more environment variables Manager Lifecycle Commands: daemon-reload Reload systemd manager configuration daemon-reexec Reexecute systemd manager System Commands: default Enter system default mode rescue Enter system rescue mode emergency Enter system emergency mode halt Shut down and halt the system poweroff Shut down and power-off the system reboot Shut down and reboot the system kexec Shut down and reboot the system with kexec exit Request user instance exit switch-root [ROOT] [INIT] Change to a different root file system suspend Suspend the system hibernate Hibernate the system hybrid-sleep Hibernate and suspend the system lines 95-123/123 (END)
Fichiers de Configuration
Les Cibles et les Unités sont configurées par des fichiers se trouvant dans le répertoire /etc/systemd/system :
[root@centos7 ~]# ls -l /etc/systemd/system total 12 drwxr-xr-x. 2 root root 54 Mar 8 13:57 basic.target.wants drwxr-xr-x. 2 root root 30 Mar 8 13:53 bluetooth.target.wants lrwxrwxrwx. 1 root root 41 Mar 8 13:53 dbus-org.bluez.service -> /usr/lib/systemd/system/bluetooth.service lrwxrwxrwx. 1 root root 41 Mar 8 13:48 dbus-org.fedoraproject.FirewallD1.service -> /usr/lib/systemd/system/firewalld.service lrwxrwxrwx. 1 root root 44 Mar 8 13:48 dbus-org.freedesktop.Avahi.service -> /usr/lib/systemd/system/avahi-daemon.service lrwxrwxrwx. 1 root root 44 Mar 8 13:57 dbus-org.freedesktop.ModemManager1.service -> /usr/lib/systemd/system/ModemManager.service lrwxrwxrwx. 1 root root 46 Mar 8 13:49 dbus-org.freedesktop.NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service lrwxrwxrwx. 1 root root 57 Mar 8 13:49 dbus-org.freedesktop.nm-dispatcher.service -> /usr/lib/systemd/system/NetworkManager-dispatcher.service lrwxrwxrwx. 1 root root 36 Mar 8 14:05 default.target -> /lib/systemd/system/graphical.target drwxr-xr-x. 2 root root 85 Mar 8 13:47 default.target.wants lrwxrwxrwx. 1 root root 35 Mar 8 13:54 display-manager.service -> /usr/lib/systemd/system/gdm.service drwxr-xr-x. 2 root root 31 Mar 8 13:47 getty.target.wants drwxr-xr-x. 2 root root 63 Jun 4 14:59 graphical.target.wants drwxr-xr-x. 2 root root 4096 Jun 4 10:00 multi-user.target.wants drwxr-xr-x. 2 root root 29 Mar 8 13:48 nfs.target.wants drwxr-xr-x. 2 root root 25 Mar 8 13:50 printer.target.wants drwxr-xr-x. 2 root root 30 Jun 4 10:00 remote-fs.target.wants drwxr-xr-x. 2 root root 4096 Mar 8 13:50 sockets.target.wants drwxr-xr-x. 2 root root 35 Mar 8 13:57 spice-vdagentd.target.wants drwxr-xr-x. 2 root root 4096 Mar 8 13:49 sysinit.target.wants drwxr-xr-x. 2 root root 83 Mar 8 13:49 system-update.target.wants
ainsi que par des fichiers se trouvant dans le répertoire /lib/systemd/system et /usr/lib/systemd/system :
[root@centos7 ~]# ls -l /lib/systemd/system | more total 1208 -rw-r--r--. 1 root root 275 Mar 24 04:56 abrt-ccpp.service -rw-r--r--. 1 root root 380 Mar 24 04:56 abrtd.service -rw-r--r--. 1 root root 361 Mar 24 04:56 abrt-oops.service -rw-r--r--. 1 root root 266 Mar 24 04:56 abrt-pstoreoops.service -rw-r--r--. 1 root root 262 Mar 24 04:56 abrt-vmcore.service -rw-r--r--. 1 root root 311 Mar 24 04:56 abrt-xorg.service -rw-r--r--. 1 root root 421 Jun 10 2014 accounts-daemon.service -rw-r--r--. 1 root root 501 Mar 5 20:37 alsa-restore.service -rw-r--r--. 1 root root 558 Mar 5 20:37 alsa-state.service -rw-r--r--. 1 root root 412 Mar 5 20:37 alsa-store.service -rw-r--r--. 1 root root 645 Mar 26 11:43 anaconda-direct.service -rw-r--r--. 1 root root 185 Mar 26 11:43 anaconda-nm-config.service -rw-r--r--. 1 root root 660 Mar 26 11:43 anaconda-noshell.service -rw-r--r--. 1 root root 387 Mar 26 11:43 anaconda.service -rw-r--r--. 1 root root 684 Mar 26 11:43 anaconda-shell@.service -rw-r--r--. 1 root root 322 Mar 26 11:43 anaconda-sshd.service -rw-r--r--. 1 root root 312 Mar 26 11:43 anaconda.target drwxr-xr-x. 2 root root 4096 Jun 4 15:33 anaconda.target.wants -rw-r--r--. 1 root root 498 Mar 26 11:43 anaconda-tmux@.service -rw-r--r--. 1 root root 275 Jun 10 2014 arp-ethers.service -rw-r--r--. 1 root root 205 Oct 7 2014 atd.service -rw-r-----. 1 root root 669 Mar 5 22:59 auditd.service -rw-r--r--. 1 root root 663 Mar 6 05:17 auth-rpcgss-module.service lrwxrwxrwx. 1 root root 14 Jun 4 09:52 autovt@.service -> getty@.service -rw-r--r--. 1 root root 1044 Mar 5 23:03 avahi-daemon.service -rw-r--r--. 1 root root 874 Mar 5 23:03 avahi-daemon.socket -rw-r--r--. 1 root root 546 May 12 21:44 basic.target drwxr-xr-x. 2 root root 4096 Jun 4 10:07 basic.target.wants --More--
[root@centos7 ~]# ls -l /usr/lib/systemd/system | more total 1208 -rw-r--r--. 1 root root 275 Mar 24 04:56 abrt-ccpp.service -rw-r--r--. 1 root root 380 Mar 24 04:56 abrtd.service -rw-r--r--. 1 root root 361 Mar 24 04:56 abrt-oops.service -rw-r--r--. 1 root root 266 Mar 24 04:56 abrt-pstoreoops.service -rw-r--r--. 1 root root 262 Mar 24 04:56 abrt-vmcore.service -rw-r--r--. 1 root root 311 Mar 24 04:56 abrt-xorg.service -rw-r--r--. 1 root root 421 Jun 10 2014 accounts-daemon.service -rw-r--r--. 1 root root 501 Mar 5 20:37 alsa-restore.service -rw-r--r--. 1 root root 558 Mar 5 20:37 alsa-state.service -rw-r--r--. 1 root root 412 Mar 5 20:37 alsa-store.service -rw-r--r--. 1 root root 645 Mar 26 11:43 anaconda-direct.service -rw-r--r--. 1 root root 185 Mar 26 11:43 anaconda-nm-config.service -rw-r--r--. 1 root root 660 Mar 26 11:43 anaconda-noshell.service -rw-r--r--. 1 root root 387 Mar 26 11:43 anaconda.service -rw-r--r--. 1 root root 684 Mar 26 11:43 anaconda-shell@.service -rw-r--r--. 1 root root 322 Mar 26 11:43 anaconda-sshd.service -rw-r--r--. 1 root root 312 Mar 26 11:43 anaconda.target drwxr-xr-x. 2 root root 4096 Jun 4 15:33 anaconda.target.wants -rw-r--r--. 1 root root 498 Mar 26 11:43 anaconda-tmux@.service -rw-r--r--. 1 root root 275 Jun 10 2014 arp-ethers.service -rw-r--r--. 1 root root 205 Oct 7 2014 atd.service -rw-r-----. 1 root root 669 Mar 5 22:59 auditd.service -rw-r--r--. 1 root root 663 Mar 6 05:17 auth-rpcgss-module.service lrwxrwxrwx. 1 root root 14 Jun 4 09:52 autovt@.service -> getty@.service -rw-r--r--. 1 root root 1044 Mar 5 23:03 avahi-daemon.service -rw-r--r--. 1 root root 874 Mar 5 23:03 avahi-daemon.socket -rw-r--r--. 1 root root 546 May 12 21:44 basic.target drwxr-xr-x. 2 root root 4096 Jun 4 10:07 basic.target.wants --More--
Par exemple, sous RHEL/CentOS 7, le service sshd est configuré par le fichier /usr/lib/systemd/system/sshd.service :
[root@centos7 ~]# cat /usr/lib/systemd/system/sshd.service [Unit] Description=OpenSSH server daemon After=network.target sshd-keygen.service Wants=sshd-keygen.service [Service] EnvironmentFile=/etc/sysconfig/sshd ExecStart=/usr/sbin/sshd -D $OPTIONS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
Dans le fichier on peut noter la présence des lignes suivantes :
- ExecStart=/usr/sbin/sshd -D $OPTIONS,
- Cette ligne définit l'exécutable à lancer,
- After=network.target sshd-keygen.service,
- Cette ligne indique les services qui devraient être démarrés avant le démarrage de sshd,
- WantedBy=multi-user.target,
- Cette ligne indique la Cible dans laquelle le service doit être démarré,
- Restart=on-failure,
- Cette ligne indique quand le service doit être re-démarré.
Système de Démarrage
Systemd utilise des Cibles d'une manière similaire à ce que SysVinit utilise des niveaux d'exécution. Pour rendre la transition plus facile, il existe des Cibles qui simulent les niveaux d'exécution de SysVinit :
- runlevel0.target,
- runlevel1.target,
- runlevel2.target,
- runlevel3.target,
- runlevel4.target,
- runlevel5.target,
- runlevel6.target.
Ceci étant dans RHEL/CentOS 7 il y principalement deux Cibles finales :
- multi-user.target qui est l'équivalent du niveau d'exécution 3,
- graphical.target qui est l'équivalent du niveau d'exécution 5.
Chaque Cible est décrite par un fichier de configuration :
[root@centos7 ~]# cat /usr/lib/systemd/system/graphical.target # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. [Unit] Description=Graphical Interface Documentation=man:systemd.special(7) Requires=multi-user.target After=multi-user.target Conflicts=rescue.target Wants=display-manager.service AllowIsolate=yes [Install] Alias=default.target
Dans ce fichier on peut noter la présence des lignes suivantes :
- Requires=multi-user.target,
- Cette ligne indique que le graphical.target ne peut pas être atteint si le multi-user.target n'a pas été atteint aupréalable,
- After=multi-user.target,
- Cette ligne indique le multi-user.target doit d'abord être lancé,
- Conflicts=rescue.target,
- Cette ligne indique la Cible en conflit avec le graphical.target,
- Wants=display-manager.service,
- Cette ligne indique quel service doit être démarré.
Dernièrement, sous RHEL/CentOS 7, la Cible par défaut peut être modifiée en éditant le lien symbolique /etc/systemd/system/default.target :
[root@centos7 ~]# ls -l /etc/systemd/system/default.target lrwxrwxrwx. 1 root root 36 Mar 8 14:05 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target
La Commande systemd-analyze
Pour avoir une évaluation du temps de démarrage, il convient d'utiliser la commande suivante :
[root@centos7 ~]# systemd-analyze Startup finished in 769ms (kernel) + 4.643s (initrd) + 40.147s (userspace) = 45.560s
L'option blame de la commande systemd-analyze permet de voir le temps de démarrage de chaque Unité afin de pourvoir se concentrer sur les plus lentes :
[root@centos7 ~]# systemd-analyze blame 12.274s firewalld.service 10.302s tuned.service 9.676s accounts-daemon.service 8.875s gssproxy.service 8.860s ModemManager.service 8.598s vboxadd-x11.service 7.829s kdump.service 7.089s vboxadd.service 6.398s plymouth-quit-wait.service 5.593s NetworkManager-wait-online.service 5.379s avahi-daemon.service 5.104s abrt-ccpp.service 5.065s postfix.service 4.684s systemd-logind.service 4.385s sysstat.service 4.306s rtkit-daemon.service 3.927s systemd-udev-settle.service 3.396s ksmtuned.service 3.084s rhel-dmesg.service 2.811s libvirtd.service 2.428s chronyd.service 2.401s vboxadd-service.service 2.349s nfs-config.service 2.266s var-lib-nfs-rpc_pipefs.mount 2.229s rhel-loadmodules.service 2.104s rsyslog.service 1.357s network.service 1.283s lvm2-monitor.service 1.246s rpcbind.service 1.069s systemd-fsck-root.service 1.007s colord.service 944ms systemd-tmpfiles-setup-dev.service 872ms systemd-tmpfiles-clean.service 791ms rhel-readonly.service 780ms NetworkManager.service 743ms dmraid-activation.service 723ms gdm.service 720ms ksm.service 718ms polkit.service 716ms proc-fs-nfsd.mount 669ms auditd.service 660ms boot.mount 608ms systemd-udev-trigger.service 601ms kmod-static-nodes.service 565ms netcf-transaction.service 520ms systemd-vconsole-setup.service 497ms systemd-sysctl.service 487ms sys-kernel-debug.mount 302ms dev-disk-by\x2duuid-11a4d11d\x2d81e4\x2d46a7\x2d82e0\x2d7796cd597dc9.swap 297ms systemd-tmpfiles-setup.service 283ms dev-mqueue.mount 282ms dev-hugepages.mount 261ms rhel-import-state.service 243ms udisks2.service 239ms systemd-user-sessions.service 235ms rpc-statd-notify.service 217ms systemd-random-seed.service 173ms plymouth-read-write.service 161ms systemd-udevd.service 147ms upower.service 142ms systemd-fsck@dev-disk-by\x2duuid-e8d3bd48\x2d1386\x2d411c\x2d9675\x2d41c3f8f1a309.service 110ms plymouth-start.service 96ms sys-fs-fuse-connections.mount 82ms bluetooth.service 73ms iscsi-shutdown.service 69ms systemd-remount-fs.service 63ms systemd-hostnamed.service 53ms systemd-update-utmp.service 38ms systemd-journal-flush.service 33ms sys-kernel-config.mount 31ms systemd-update-utmp-runlevel.service lines 43-71/71 (END)
L'option critical-chain permet de voir l'enchaînement des événements qui amènent au chargement de l'Unité passée en argument :
[root@centos7 ~]# systemd-analyze critical-chain sshd.service The time after the unit is active or started is printed after the "@" character. The time the unit takes to start is printed after the "+" character. sshd.service @32.037s └─network.target @31.990s └─network.service @30.621s +1.357s └─NetworkManager.service @24.242s +780ms └─firewalld.service @11.954s +12.274s └─basic.target @11.937s └─sockets.target @11.937s └─dbus.socket @11.936s └─sysinit.target @11.784s └─systemd-update-utmp.service @11.726s +53ms └─auditd.service @11.051s +669ms └─systemd-tmpfiles-setup.service @10.734s +297ms └─rhel-import-state.service @10.470s +261ms └─local-fs.target @10.464s └─boot.mount @9.798s +660ms └─systemd-fsck@dev-disk-by\x2duuid-e8d3bd48\x2d1386\x2d411c\x2d9675\x2d41c3f8f1a309.service @9.654s +142ms └─dev-disk-by\x2duuid-e8d3bd48\x2d1386\x2d411c\x2d9675\x2d41c3f8f1a309.device @9.650s
Options de la Commande
Les options de la commande systemd-analyze sont :
[root@centos7 ~]# systemd-analyze --help systemd-analyze [OPTIONS...] {COMMAND} ... Process systemd profiling information -h --help Show this help --version Show package version --system Connect to system manager --user Connect to user service manager --order When generating a dependency graph, show only order --require When generating a dependency graph, show only requirement --from-pattern=GLOB, --to-pattern=GLOB When generating a dependency graph, filter only origins or destinations, respectively --fuzz=TIMESPAN When printing the tree of the critical chain, print also services, which finished TIMESPAN earlier, than the latest in the branch. The unit of TIMESPAN is seconds unless specified with a different unit, i.e. 50ms --no-pager Do not pipe output into a pager Commands: time Print time spent in the kernel before reaching userspace blame Print list of running units ordered by time to init critical-chain Print a tree of the time critical chain of units plot Output SVG graphic showing service initialization dot Output dependency graph in dot(1) format set-log-level LEVEL Set logging threshold for systemd dump Output state serialization of service manager
Gestion des Services
Pour obtenir le détail sur un service donné, il convient d'utiliser la commande systemctl :
[root@centos7 ~]# systemctl status sshd.service sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled) Active: active (running) since Thu 2015-06-11 11:01:52 CEST; 2h 45min ago Main PID: 1212 (sshd) CGroup: /system.slice/sshd.service └─1212 /usr/sbin/sshd -D Jun 11 11:01:52 centos7.fenestros.loc systemd[1]: Started OpenSSH server daemon. Jun 11 11:01:53 centos7.fenestros.loc sshd[1212]: Server listening on 0.0.0.0 port 22. Jun 11 11:01:53 centos7.fenestros.loc sshd[1212]: Server listening on :: port 22.
Pour arrêter une Unité de service, utilisez la commande suivante :
[root@centos7 ~]# systemctl stop sshd.service [root@centos7 ~]# systemctl status sshd.service sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled) Active: inactive (dead) since Thu 2015-06-11 13:58:59 CEST; 16s ago Process: 1212 ExecStart=/usr/sbin/sshd -D $OPTIONS (code=exited, status=0/SUCCESS) Main PID: 1212 (code=exited, status=0/SUCCESS) Jun 11 11:01:52 centos7.fenestros.loc systemd[1]: Started OpenSSH server daemon. Jun 11 11:01:53 centos7.fenestros.loc sshd[1212]: Server listening on 0.0.0.0 port 22. Jun 11 11:01:53 centos7.fenestros.loc sshd[1212]: Server listening on :: port 22. Jun 11 13:58:59 centos7.fenestros.loc systemd[1]: Stopping OpenSSH server daemon... Jun 11 13:58:59 centos7.fenestros.loc sshd[1212]: Received signal 15; terminating. Jun 11 13:58:59 centos7.fenestros.loc systemd[1]: Stopped OpenSSH server daemon.
Pour démarrer un service, utilisez la commande suivante :
[root@centos7 ~]# systemctl start ssh.service [root@centos7 ~]# systemctl status sshd.service sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled) Active: active (running) since Thu 2015-06-11 14:00:17 CEST; 6s ago Main PID: 6624 (sshd) CGroup: /system.slice/sshd.service └─6624 /usr/sbin/sshd -D Jun 11 14:00:17 centos7.fenestros.loc systemd[1]: Starting OpenSSH server daemon... Jun 11 14:00:17 centos7.fenestros.loc systemd[1]: Started OpenSSH server daemon. Jun 11 14:00:17 centos7.fenestros.loc sshd[6624]: Server listening on 0.0.0.0 port 22. Jun 11 14:00:17 centos7.fenestros.loc sshd[6624]: Server listening on :: port 22.
Pour désactiver un service au prochain démarrage du système, utilisez l'option disable :
[root@centos7 ~]# systemctl disable sshd.service rm '/etc/systemd/system/multi-user.target.wants/sshd.service' [root@centos7 ~]# systemctl status sshd.service sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled) Active: active (running) since Thu 2015-06-11 14:00:17 CEST; 1min 59s ago Main PID: 6624 (sshd) CGroup: /system.slice/sshd.service └─6624 /usr/sbin/sshd -D Jun 11 14:00:17 centos7.fenestros.loc systemd[1]: Starting OpenSSH server daemon... Jun 11 14:00:17 centos7.fenestros.loc systemd[1]: Started OpenSSH server daemon. Jun 11 14:00:17 centos7.fenestros.loc sshd[6624]: Server listening on 0.0.0.0 port 22. Jun 11 14:00:17 centos7.fenestros.loc sshd[6624]: Server listening on :: port 22.
Pour activer un service au prochain démarrage du système, utilisez l'option enable :
[root@centos7 ~]# systemctl enable sshd.service ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service' [root@centos7 ~]# systemctl status sshd.service sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled) Active: active (running) since Thu 2015-06-11 14:00:17 CEST; 3min 27s ago Main PID: 6624 (sshd) CGroup: /system.slice/sshd.service └─6624 /usr/sbin/sshd -D Jun 11 14:00:17 centos7.fenestros.loc systemd[1]: Starting OpenSSH server daemon... Jun 11 14:00:17 centos7.fenestros.loc systemd[1]: Started OpenSSH server daemon. Jun 11 14:00:17 centos7.fenestros.loc sshd[6624]: Server listening on 0.0.0.0 port 22. Jun 11 14:00:17 centos7.fenestros.loc sshd[6624]: Server listening on :: port 22.
Fichiers Spéciaux
Dans l'ordinateur les périphériques sont reliés à un contrôleur qui communique avec le processeur à l'aide d'un bus. Le contrôleur ainsi que les périphériques nécessitent des pilotes. Sous Linux, les pilotes sont généralement fournis sous la forme d'un module. Chaque périphérique est représenté par un fichier spécial dans le répertoire /dev et c'est dans ce fichier que le système trouve les informations nécessaires pour s'adresser au pilote.
Important : Les périphériques qui nécessitent à ce que l'ordinateur soit éteint afin des les brancher/débrancher sont appelés communément Cold Plug Devices. Les périphériques qui peuvent être brancher/débrancher à chaud sont appelés des Hot Plug Devices.
Consultez le contenu du répertoire /dev :
[root@centos7 ~]# ls -l /dev | more total 0 crw-------. 1 root root 10, 235 Oct 28 09:40 autofs drwxr-xr-x. 2 root root 140 Oct 28 09:40 block drwxr-xr-x. 2 root root 80 Oct 28 09:40 bsg crw-------. 1 root root 10, 234 Oct 28 09:40 btrfs-control drwxr-xr-x. 3 root root 60 Oct 28 09:40 bus lrwxrwxrwx. 1 root root 3 Oct 28 09:40 cdrom -> sr0 drwxr-xr-x. 2 root root 2800 Oct 28 09:41 char crw-------. 1 root root 5, 1 Oct 28 09:40 console lrwxrwxrwx. 1 root root 11 Oct 28 09:40 core -> /proc/kcore drwxr-xr-x. 3 root root 80 Oct 28 09:40 cpu crw-------. 1 root root 10, 61 Oct 28 09:40 cpu_dma_latency crw-------. 1 root root 10, 62 Oct 28 09:40 crash drwxr-xr-x. 5 root root 100 Oct 28 09:40 disk drwxr-xr-x. 2 root root 60 Oct 28 09:40 dri lrwxrwxrwx. 1 root root 13 Oct 28 09:40 fd -> /proc/self/fd crw-rw-rw-. 1 root root 1, 7 Oct 28 09:40 full crw-rw-rw-. 1 root root 10, 229 Oct 28 09:41 fuse crw-------. 1 root root 10, 228 Oct 28 09:40 hpet drwxr-xr-x. 3 root root 0 Oct 28 09:40 hugepages prw-------. 1 root root 0 Oct 28 09:40 initctl drwxr-xr-x. 3 root root 240 Oct 28 09:40 input crw-r--r--. 1 root root 1, 11 Oct 28 09:40 kmsg --More--
On peut noter dans la sortie de la commande que certains fichiers sont de type bloc (b), tandis que d'autre sont de type caractère (c).
... brw-rw---- 1 root disk 8, 1 Nov 1 08:39 sda1 ... crw-rw-rw- 1 root tty 5, 0 Nov 1 08:39 tty ...
La différence entre les deux repose sur le type de communication entre le système et le module. Dans le premier cas le système accède au périphérique par des coordonnées du bloc de données sur le support tandis que dans le deuxième cas la communication d'échange de données se fait octet par octet sans utiliser des tampons.
Les deux informations clefs du fichier spécial sont situées à la place de la taille d'un fichier normal et se nomment le majeur et le mineur :
- le majeur identifie le pilote du périphérique et donc son contrôleur,
- le mineur identifie le périphérique ou une particularité du périphérique telle une partition d'un disque.
Commandes
La Commande lspci
Cette commande vous renseigne sur les adaptateurs reliés aux bus PCI, AGP et PCI express :
[root@centos7 ~]# lspci 00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) 00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] 00:01.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01) 00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter 00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02) 00:04.0 System peripheral: InnoTek Systemberatung GmbH VirtualBox Guest Service 00:05.0 Multimedia audio controller: Intel Corporation 82801AA AC'97 Audio Controller (rev 01) 00:06.0 USB controller: Apple Inc. KeyLargo/Intrepid USB 00:07.0 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08) 00:0b.0 USB controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller 00:0d.0 SATA controller: Intel Corporation 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [AHCI mode] (rev 02)
Pour obtenir de l'information sur un adaptateur spécifique, il convient d'utiliser la même commande avec l'option -v en spécifiant l'identifiant concerné :
[root@centos7 ~]# lspci -v -s 00:03.0 00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02) Subsystem: Intel Corporation PRO/1000 MT Desktop Adapter Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 19 Memory at f0000000 (32-bit, non-prefetchable) [size=128K] I/O ports at d010 [size=8] Capabilities: [dc] Power Management version 2 Capabilities: [e4] PCI-X non-bridge device Kernel driver in use: e1000
ou :
[root@centos7 ~]# lspci -vv -s 00:03.0 00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02) Subsystem: Intel Corporation PRO/1000 MT Desktop Adapter Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- Latency: 64 (63750ns min) Interrupt: pin A routed to IRQ 19 Region 0: Memory at f0000000 (32-bit, non-prefetchable) [size=128K] Region 2: I/O ports at d010 [size=8] Capabilities: [dc] Power Management version 2 Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-) Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME- Capabilities: [e4] PCI-X non-bridge device Command: DPERE- ERO+ RBC=512 OST=1 Status: Dev=ff:1f.0 64bit- 133MHz- SCD- USC- DC=simple DMMRBC=2048 DMOST=1 DMCRS=8 RSCEM- 266MHz- 533MHz- Kernel driver in use: e1000
Options de la commande
Les options de cette commande sont :
[root@centos7 ~]# lspci --help lspci: invalid option -- '-' Usage: lspci [<switches>] Basic display modes: -mm Produce machine-readable output (single -m for an obsolete format) -t Show bus tree Display options: -v Be verbose (-vv for very verbose) -k Show kernel drivers handling each device -x Show hex-dump of the standard part of the config space -xxx Show hex-dump of the whole config space (dangerous; root only) -xxxx Show hex-dump of the 4096-byte extended config space (root only) -b Bus-centric view (addresses and IRQ's as seen by the bus) -D Always show domain numbers Resolving of device ID's to names: -n Show numeric ID's -nn Show both textual and numeric ID's (names & numbers) -q Query the PCI ID database for unknown ID's via DNS -qq As above, but re-query locally cached entries -Q Query the PCI ID database for all ID's via DNS Selection of devices: -s [[[[<domain>]:]<bus>]:][<slot>][.[<func>]] Show only devices in selected slots -d [<vendor>]:[<device>] Show only devices with specified ID's Other options: -i <file> Use specified ID database instead of /usr/share/hwdata/pci.ids -p <file> Look up kernel modules in a given file instead of default modules.pcimap -M Enable `bus mapping' mode (dangerous; root only) PCI access options: -A <method> Use the specified PCI access method (see `-A help' for a list) -O <par>=<val> Set PCI access parameter (see `-O help' for a list) -G Enable PCI access debugging -H <mode> Use direct hardware access (<mode> = 1 or 2) -F <file> Read PCI configuration dump from a given file
La Commande lsusb
Cette commande vous renseigne sur les adaptateurs reliés au bus usb :
[root@centos7 ~]# lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub [root@centos7 ~]# lsusb -vt /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/8p, 12M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/8p, 480M
Options de la commande
Les options de cette commande sont :
[root@centos7 ~]# lsusb --help Usage: lsusb [options]... List USB devices -v, --verbose Increase verbosity (show descriptors) -s [[bus]:][devnum] Show only devices with specified device and/or bus numbers (in decimal) -d vendor:[product] Show only devices with the specified vendor and product ID numbers (in hexadecimal) -D device Selects which device lsusb will examine -t, --tree Dump the physical USB device hierarchy as a tree -V, --version Show version of program -h, --help Show usage and help
La Commande dmidecode
La commande dmidecode lit la table DMI (Desktop Management Interface) aussi appelée SMBIOS (System Management BIOS) et fourni les informations sur :
- l'état du matériel actuel,
- les extensions possibles.
[root@centos7 ~]# dmidecode # dmidecode 2.12 SMBIOS 2.5 present. 10 structures occupying 450 bytes. Table at 0x000E1000. Handle 0x0000, DMI type 0, 20 bytes BIOS Information Vendor: innotek GmbH Version: VirtualBox Release Date: 12/01/2006 Address: 0xE0000 Runtime Size: 128 kB ROM Size: 128 kB Characteristics: ISA is supported PCI is supported Boot from CD is supported Selectable boot is supported 8042 keyboard services are supported (int 9h) CGA/mono video services are supported (int 10h) ACPI is supported Handle 0x0001, DMI type 1, 27 bytes System Information Manufacturer: innotek GmbH Product Name: VirtualBox Version: 1.2 Serial Number: 0 UUID: DDEE345C-66F8-4250-B5A2-85CEF2C1C54D Wake-up Type: Power Switch SKU Number: Not Specified Family: Virtual Machine Handle 0x0008, DMI type 2, 15 bytes Base Board Information Manufacturer: Oracle Corporation Product Name: VirtualBox Version: 1.2 Serial Number: 0 Asset Tag: Not Specified Features: Board is a hosting board Location In Chassis: Not Specified Chassis Handle: 0x0003 Type: Motherboard Contained Object Handles: 0 Handle 0x0003, DMI type 3, 13 bytes Chassis Information Manufacturer: Oracle Corporation Type: Other Lock: Not Present Version: Not Specified Serial Number: Not Specified Asset Tag: Not Specified Boot-up State: Safe Power Supply State: Safe Thermal State: Safe Security Status: None Handle 0x0007, DMI type 126, 42 bytes Inactive Handle 0x0005, DMI type 126, 15 bytes Inactive Handle 0x0006, DMI type 126, 28 bytes Inactive Handle 0x0002, DMI type 11, 7 bytes OEM Strings String 1: vboxVer_4.3.28 String 2: vboxRev_100309 Handle 0x0008, DMI type 128, 8 bytes OEM-specific Type Header and Data: 80 08 08 00 01 15 21 00 Handle 0xFEFF, DMI type 127, 4 bytes End Of Table
Options de la commande
Les options de cette commande sont :
[root@centos7 ~]# dmidecode --help Usage: dmidecode [OPTIONS] Options are: -d, --dev-mem FILE Read memory from device FILE (default: /dev/mem) -h, --help Display this help text and exit -q, --quiet Less verbose output -s, --string KEYWORD Only display the value of the given DMI string -t, --type TYPE Only display the entries of given type -u, --dump Do not decode the entries --dump-bin FILE Dump the DMI data to a binary file --from-dump FILE Read the DMI data from a binary file -V, --version Display the version and exit
Répertoire /proc
Le répertoire /proc contient des fichiers et des répertoires virtuels. Le contenu de ces fichiers est créé dynamiquement lors de la consultation. Seul root peut consulter la totalité des informations dans le répertoire /proc.
[root@centos7 ~]# ls /proc 1 217 260 2833 3085 465 5898 fb sched_debug 10 22619 2605 2879 3091 478 5933 filesystems scsi 11 22650 2606 2883 3104 482 5940 fs self 12 228 261 2884 3108 484 60 interrupts slabinfo 1215 229 262 29 3124 485 604 iomem softirqs 1217 22908 263 2901 3172 488 698 ioports stat 1227 230 264 2906 3185 490 7 irq swaps 1228 232 265 2910 3304 492 7110 kallsyms sys 1230 233 2671 2913 3496 494 8 kcore sysrq-trigger 1264 23387 2676 2924 3543 495 83 keys sysvipc 13 235 27 2926 363 5 9 key-users timer_list 1372 23580 2749 2931 370 502 acpi kmsg timer_stats 14 23916 2752 2937 372 503 asound kpagecount tty 15 23998 2759 2948 38 508 buddyinfo kpageflags uptime 16 24 2762 2955 381 509 bus loadavg version 17 24013 2764 2967 40 519 cgroups locks vmallocinfo 1732 2427 2765 2971 41 521 cmdline mdstat vmstat 1744 248 2767 2973 414 525 consoles meminfo zoneinfo 17788 2486 2768 2983 431 530 cpuinfo misc 18 25 2782 2985 432 536 crypto modules 19 2586 2798 2988 433 549 devices mounts 2 259 28 2998 434 586 diskstats mtrr 20 2595 2802 3 436 587 dma net 20638 2597 2806 3058 454 5894 driver pagetypeinfo 21 26 2818 3084 458 5897 execdomains partitions
Répertoires
ide/scsi
Ce répertoire contient des répertoires dans lesquels se trouvent des informations sur la capacité, le type et la géométrie des disques.
acpi
Ce répertoire contient des informations sur la gestion de l'énérgie, les températures, les vitesses de ventilateurs, la charge des batteries.
bus
Ce répertoire contient un sous-répertoire par bus.
net
Ce répertoire contient des informations sur le réseau.
sys
Ce répertoire contient des paramètres du noyau. Certains des fichiers dans ce répertoire sont accessibles en écriture par root en temps réel. Par exemple pour éviter des attaques réseau DoS utilisant la commande ping, saisissez la commande suivante :
# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all [Entrée]
Cette commande a pour résultat d'ignorer les reqûetes ping.
La commande sysctl
Les fichiers dans le répertoire /proc/sys peuvent être administrés par la commande sysctl en temps réel.
La commande sysctl applique les règles consignés dans le fichier /etc/sysctl.conf au démarrage de la machine.
Saisissez la commande :
[root@centos7 ~]# cat /etc/sysctl.conf # System default settings live in /usr/lib/sysctl.d/00-system.conf. # To override those settings, enter new settings here, or in an /etc/sysctl.d/<name>.conf file # # For more information, see sysctl.conf(5) and sysctl.d(5). [root@centos7 ~]# cat /usr/lib/sysctl.d/00-system.conf # Kernel sysctl configuration file # # For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and # sysctl.conf(5) for more details. # Disable netfilter on bridges. net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0 # Controls the maximum shared segment size, in bytes kernel.shmmax = 4294967295 # Controls the maximum number of shared memory segments, in pages [root@centos7 ~]# ls -l /etc/sysctl.d/ total 0 lrwxrwxrwx. 1 root root 14 Jun 4 09:54 99-sysctl.conf -> ../sysctl.conf [root@centos7 ~]# cat /etc/sysctl.d/99-sysctl.conf # System default settings live in /usr/lib/sysctl.d/00-system.conf. # To override those settings, enter new settings here, or in an /etc/sysctl.d/<name>.conf file # # For more information, see sysctl.conf(5) and sysctl.d(5).
Options de la commande
Les options de la commande sysctl sont :
[root@centos7 ~]# sysctl --help Usage: sysctl [options] [variable[=value] ...] Options: -a, --all display all variables -A alias of -a -X alias of -a --deprecated include deprecated parameters to listing -b, --binary print value without new line -e, --ignore ignore unknown variables errors -N, --names print variable names without values -n, --values print only values of a variables -p, --load[=<file>] read values from file -f alias of -p --system read values from all system directories -r, --pattern <expression> select setting that match expression -q, --quiet do not echo variable set -w, --write enable writing a value to variable -o does nothing -x does nothing -d alias of -h -h, --help display this help and exit -V, --version output version information and exit For more details see sysctl(8).
Important : Consultez la page de la traduction du manuel de sysctl ici pour comprendre la commande.
Fichiers
Processeur
[root@centos7 ~]# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 55 model name : Intel(R) Celeron(R) CPU N2840 @ 2.16GHz stepping : 8 microcode : 0x19 cpu MHz : 2167.721 cache size : 6144 KB physical id : 0 siblings : 1 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 5 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc rep_good nopl pni monitor ssse3 lahf_lm bogomips : 4335.44 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management:
Interruptions système
[root@centos7 ~]# cat /proc/interrupts CPU0 0: 189 IO-APIC-edge timer 1: 5890 IO-APIC-edge i8042 8: 0 IO-APIC-edge rtc0 9: 1 IO-APIC-fasteoi acpi 12: 22452 IO-APIC-edge i8042 14: 0 IO-APIC-edge ata_piix 15: 13891 IO-APIC-edge ata_piix 19: 25816 IO-APIC-fasteoi ehci_hcd:usb1, enp0s3 20: 119352 IO-APIC-fasteoi vboxguest 21: 33754 IO-APIC-fasteoi ahci, snd_intel8x0 22: 0 IO-APIC-fasteoi ohci_hcd:usb2 NMI: 0 Non-maskable interrupts LOC: 1630315 Local timer interrupts SPU: 0 Spurious interrupts PMI: 0 Performance monitoring interrupts IWI: 83206 IRQ work interrupts RTR: 0 APIC ICR read retries RES: 0 Rescheduling interrupts CAL: 0 Function call interrupts TLB: 0 TLB shootdowns TRM: 0 Thermal event interrupts THR: 0 Threshold APIC interrupts MCE: 0 Machine check exceptions MCP: 48 Machine check polls ERR: 0 MIS: 0
Important : Un pilote de périphérique demande au processeur de fournir un service en utilisant un IRQ. Quand la demande est faite, le processeur interrompe ses activités et passe le contrôle au pilote identifié par l'IRQ. Techniquement l'attribution d'un IRQ à un périphérique doit être exclusive. Dans le cas où deux périphériques demandent un service en même temps, c'est le périphérique ayant l'IRQ le plus bas qui est prioritaire.
Canaux DMA
[root@centos7 ~]# cat /proc/dma 4: cascade
Plages d'entrée/sortie
[root@centos7 ~]# cat /proc/ioports | more 0000-001f : dma1 0020-0021 : pic1 0040-0043 : timer0 0050-0053 : timer1 0060-0060 : keyboard 0064-0064 : keyboard 0070-0071 : rtc_cmos 0070-0071 : rtc0 0080-008f : dma page reg 00a0-00a1 : pic2 00c0-00df : dma2 00f0-00ff : fpu 0170-0177 : 0000:00:01.1 0170-0177 : ata_piix 01f0-01f7 : 0000:00:01.1 01f0-01f7 : ata_piix 0376-0376 : 0000:00:01.1 0376-0376 : ata_piix 03c0-03df : vga+ 03f6-03f6 : 0000:00:01.1 03f6-03f6 : ata_piix 0cf8-0cff : PCI conf1 4000-4003 : ACPI PM1a_EVT_BLK --More--
Si deux périphériques ont le même port, les deux périphériques seront inutilisables.
Périphériques
[root@centos7 ~]# cat /proc/devices Character devices: 1 mem 4 /dev/vc/0 4 tty 4 ttyS 5 /dev/tty 5 /dev/console 5 /dev/ptmx 6 lp 7 vcs 10 misc 13 input 14 sound 29 fb 99 ppdev 116 alsa 128 ptm 136 pts 162 raw 180 usb 188 ttyUSB 189 usb_device 202 cpu/msr 203 cpu/cpuid 226 drm 250 hidraw 251 usbmon 252 bsg 253 watchdog 254 rtc Block devices: 259 blkext 8 sd 9 md 11 sr 65 sd 66 sd 67 sd 68 sd 69 sd 70 sd 71 sd 128 sd 129 sd 130 sd 131 sd 132 sd 133 sd 134 sd 135 sd 253 device-mapper 254 mdp
Modules
[root@centos7 ~]# cat /proc/modules | more tcp_lp 12663 0 - Live 0xffffffffa059d000 lp 17759 0 - Live 0xffffffffa0593000 nls_utf8 12557 1 - Live 0xffffffffa0527000 isofs 39844 1 - Live 0xffffffffa0588000 bnep 19704 2 - Live 0xffffffffa0516000 bluetooth 372662 7 bnep, Live 0xffffffffa052c000 rfkill 26536 3 bluetooth, Live 0xffffffffa051f000 fuse 87741 3 - Live 0xffffffffa04ff000 ip6t_rpfilter 12546 1 - Live 0xffffffffa04fa000 ip6t_REJECT 12939 2 - Live 0xffffffffa04f5000 ipt_REJECT 12541 2 - Live 0xffffffffa04f0000 xt_conntrack 12760 7 - Live 0xffffffffa04e6000 ebtable_nat 12807 0 - Live 0xffffffffa04e1000 ebtable_broute 12731 0 - Live 0xffffffffa04eb000 bridge 115385 1 ebtable_broute, Live 0xffffffffa04c3000 stp 12976 1 bridge, Live 0xffffffffa04be000 llc 14552 2 bridge,stp, Live 0xffffffffa04b5000 ebtable_filter 12827 0 - Live 0xffffffffa04b0000 ebtables 30913 3 ebtable_nat,ebtable_broute,ebtable_filter, Live 0xffffffffa04a3 000 ip6table_nat 12864 1 - Live 0xffffffffa049e000 nf_conntrack_ipv6 18738 5 - Live 0xffffffffa0498000 nf_defrag_ipv6 34651 1 nf_conntrack_ipv6, Live 0xffffffffa048a000 --More--
Statistiques de l'utilisation des disques
[root@centos7 ~]# cat /proc/diskstats 11 0 sr0 21 0 132 157 0 0 0 0 0 157 157 8 0 sda 19700 638 2178341 386424 13324 1605 547086 356748 0 164849 740706 8 1 sda1 2129 0 9438 2181 2057 0 4122 392 0 2527 2569 8 2 sda2 17213 598 2165719 382957 11202 1605 542964 356316 0 164048 736814 8 3 sda3 170 31 1608 775 0 0 0 0 0 775 775
Partitions
[root@centos7 ~]# cat /proc/partitions major minor #blocks name 11 0 56876 sr0 8 0 20971520 sda 8 1 204800 sda1 8 2 7168000 sda2 8 3 3072000 sda3
Espaces de pagination
[root@centos7 ~]# cat /proc/swaps Filename Type Size Used Priority /dev/sda3 partition 3071996 0 -1
Statistiques d'utilisation du processeur
[root@centos7 ~]# cat /proc/loadavg 1.82 1.07 0.81 3/379 25349
Statistiques d'utilisation de la mémoire
[root@centos7 ~]# cat /proc/meminfo MemTotal: 1791624 kB MemFree: 72272 kB MemAvailable: 769436 kB Buffers: 404 kB Cached: 790132 kB SwapCached: 0 kB Active: 1002556 kB Inactive: 529520 kB Active(anon): 620404 kB Inactive(anon): 131808 kB Active(file): 382152 kB Inactive(file): 397712 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 3071996 kB SwapFree: 3071992 kB Dirty: 35168 kB Writeback: 0 kB AnonPages: 741568 kB Mapped: 138756 kB Shmem: 10664 kB Slab: 98304 kB SReclaimable: 59848 kB SUnreclaim: 38456 kB KernelStack: 5808 kB PageTables: 24140 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 3967808 kB Committed_AS: 3006392 kB VmallocTotal: 34359738367 kB VmallocUsed: 28612 kB VmallocChunk: 34359706684 kB HardwareCorrupted: 0 kB AnonHugePages: 256000 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 75712 kB DirectMap2M: 1759232 kB
Version du noyau
[root@centos7 ~]# cat /proc/version Linux version 3.10.0-229.4.2.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) ) #1 SMP Wed May 13 10:06:09 UTC 2015
Interprétation des informations dans /proc
Les informations brutes stockées dans /proc peuvent être interprétées grâce à l'utilisation des commandes dites de gestion des performances :
- free,
- uptime et w,
- iostat,
- vmstat,
- mpstat,
- sar.
Commandes
free
La commande free permet de donner l’état de la mémoire totale, libre, partagée, swap et bufferisée. Saisissez donc la commande suivante :
[root@centos7 ~]# free -m total used free shared buff/cache available Mem: 1749 859 76 6 813 707 Swap: 2999 3 2996
Dans le cas de cet exemple, nous pouvons constater que l’affichage montre :
- 1749 Mo de mémoire physique totale,
- 859 Mo de mémoire physique utilisée et 76 Mo de mémoire physique libre,
- 2999 Mo de mémoire swap totale et 3 Mo de swap utilisé
Les options de cette commande sont :
[root@centos7 ~]# free --help Usage: free [options] Options: -b, --bytes show output in bytes -k, --kilo show output in kilobytes -m, --mega show output in megabytes -g, --giga show output in gigabytes --tera show output in terabytes -h, --human show human-readable output --si use powers of 1000 not 1024 -l, --lohi show detailed low and high memory statistics -t, --total show total for RAM + swap -s N, --seconds N repeat printing every N seconds -c N, --count N repeat printing N times, then exit -w, --wide wide output --help display this help and exit -V, --version output version information and exit For more details see free(1).
uptime ou w
Chacune des ces commandes indique la charge moyenne du ou des processeurs depuis 1 minute, 5 minutes et 15 minutes :
[root@centos7 ~]# uptime 14:43:46 up 4:05, 2 users, load average: 0.92, 1.23, 0.95 [root@centos7 ~]# w 14:43:49 up 4:05, 2 users, load average: 0.92, 1.23, 0.95 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT trainee :0 :0 Wed09 ?xdm? 40:01 0.74s gdm-session-worker [pam/gdm-password] trainee pts/0 :0 Wed10 5.00s 0.65s 26.90s /usr/libexec/gnome-terminal-server
Les valeurs load average ou charge moyenne indiquent le nombre moyen de processus en cours de traitement ou en attente pour la période concernée.
Par exemple si les valeurs sur un système muni d'un seul processeur étaient 3,48 4,00 3,85 ceci indiquerait que le processeur a du mal à traiter les processus mettant en moyenne :
- 2,48 processus en attente dans la dernière minute,
- 3,00 processus en attente dans les dernières 5 minutes,
- 2,85 processus en attente dans les dernières 15 minutes.
Les options de ces commandes sont :
[root@centos7 ~]# uptime --help Usage: uptime [options] Options: -p, --pretty show uptime in pretty format -h, --help display this help and exit -s, --since system up since -V, --version output version information and exit For more details see uptime(1). [root@centos7 ~]# w --help Usage: w [options] Options: -h, --no-header do not print header -u, --no-current ignore current process username -s, --short short format -f, --from show remote hostname field -o, --old-style old style output -i, --ip-addr display IP address instead of hostname (if possible) --help display this help and exit -V, --version output version information and exit For more details see w(1).
iostat
La commande iostat affiche des statistiques sur l'utilisation des disques, des terminaux et des lecteurs de cartouche :
[root@centos7 ~]# iostat Linux 3.10.0-229.4.2.el7.x86_64 (centos7.fenestros.loc) 11/02/2015 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 9.00 0.14 2.67 0.29 0.00 87.90 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn scd0 0.00 0.00 0.00 66 0 sda 2.56 95.04 37.09 1409026 549881
Au-dessous de la première ligne indiquant la version du noyau du système et son nom d'hôte ainsi que la date actuelle, iostat affiche une vue d'ensemble de l'utilisation CPU moyenne du système depuis le dernier démarrage. Le rapport d'utilisation du CPU inclut les pourcentages suivants :
- Pourcentage de temps passé en mode utilisateur (exécutant des applications, etc.)
- Pourcentage de temps passé en mode utilisateur (pour les processus qui ont modifié leur priorité de programmation à l'aide de la commande nice)
- Pourcentage de temps passé en mode noyau
- Pourcentage de temps passé en inactivité
Notez la valeur de %iowait. Dans le cas où ce pourcentage est trop élévé, ceci indique que le processeur passe son temps à attendre les entrées et les sorties de disque.
Pour surveiller la vitesse des entrées et des sorties du disque, vous pouvez utiliser la commande hdparm.
Sous RHEL/CentOS 7, la commande hdparm n'est pas disponible par défaut. Installez donc le paquet hdparm :
[root@centos7 ~]# yum install hdparm
[root@centos7 ~]# hdparm -t /dev/sda /dev/sda: Timing buffered disk reads: 254 MB in 3.02 seconds = 84.19 MB/sec
Au-dessous du rapport d'utilisation du CPU de la sortie de la commande iostat figure le rapport d'utilisation des périphériques. Ce dernier contient une ligne pour chaque périphérique disque du système et inclut les informations suivantes :
- La spécification du périphérique, apparaissant sous la forme dev<major-number>-sequence-number où <major-number> correspond au nombre majeur du périphérique et <sequence-number> correspond à un numéro de séquence commençant par zéro.
- Le nombre de transferts (ou opérations d'E/S) par seconde.
- Le nombre de blocs de 512 octets lus par seconde.
- Le nombre de blocs de 512 octets écrits par seconde.
- Le nombre total de blocs de 512 octets lus par seconde.
- Le nombre total de blocs de 512 octets écrits par seconde.
Les options de cette commande sont :
[root@centos7 ~]# iostat --help Usage: iostat [ options ] [ <interval> [ <count> ] ] Options are: [ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ] [ -j { ID | LABEL | PATH | UUID | ... } ] [ [ -T ] -g <group_name> ] [ -p [ <device> [,...] | ALL ] ] [ <device> [...] | ALL ]
vmstat
La commande vmstat affiche des statistiques sur la mémoire, la pagination et la charge ponctuelle du processeur :
[root@centos7 ~]# vmstat 1 10 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 5 0 4600 352560 20 620332 0 0 114 37 157 236 9 3 88 0 0 1 0 4600 352736 20 620368 0 0 0 0 231 310 29 7 63 0 0 0 0 4600 352736 20 620368 0 0 0 0 223 318 32 7 60 0 0 1 0 4600 352776 20 620328 0 0 0 0 250 339 34 9 57 0 0 0 0 4600 352776 20 620328 0 0 0 0 215 285 30 9 61 0 0 0 0 4600 352776 20 620328 0 0 0 0 234 326 31 7 61 0 0 1 0 4600 352776 20 620328 0 0 0 0 219 306 31 8 62 0 0 0 0 4600 352776 20 620328 0 0 0 0 223 298 29 7 63 0 0 0 0 4600 352776 20 620328 0 0 0 0 223 314 32 7 60 0 0 1 0 4600 352776 20 620332 0 0 0 0 238 309 34 7 59 0 0
La première ligne subdivise le champ en six catégories à savoir : processus, mémoire, swap, E/S, système et CPU sur lesquelles elle donne des statistiques. La seconde ligne identifie de manière encore plus détaillée chacun des champs, permettant ainsi de parcourir simplement et rapidement l'ensemble des données lors de la recherche de statistiques spécifiques.
Les champs relatifs aux processus sont les suivants :
- r — Le nombre de processus exécutables attendant d'avoir accès au CPU
- b — Le nombre de processus exécutables dans un état de veille qui ne peut être interrompu
Les champs relatifs à la mémoire sont les suivants :
- swpd — La quantité de mémoire virtuelle utilisée
- free — La quantité de mémoire libre
- buff — La quantité de mémoire utilisée par les tampons (ou buffers)
- cache — La quantité de mémoire utilisée comme cache de pages
Les champs relatifs au swap sont les suivants :
- si — La quantité de mémoire chargée depuis le disque
- so — La quantité de mémoire déchargée sur le disque
Les champs relatifs aux Entrées/Sorties (E/S) sont les suivants :
- bi — Blocs envoyés vers un périphérique blocs
- bo— Blocs reçus d'un périphérique blocs
Les champs relatifs au système sont les suivants :
- in — Nombre d'interruptions par seconde
- cs — Nombre de changements de contexte par seconde
Les champs relatifs au CPU sont les suivants :
- us — Le pourcentage de temps pendant lequel le CPU exécute un code de niveau utilisateur
- sy — Le pourcentage de temps pendant lequel le CPU exécute un code de niveau système
- id — Le pourcentage de temps pendant lequel le CPU était inoccupé
- wa — Attente d'E/S
Les options de cette commande sont :
[root@centos7 ~]# vmstat --help Usage: vmstat [options] [delay [count]] Options: -a, --active active/inactive memory -f, --forks number of forks since boot -m, --slabs slabinfo -n, --one-header do not redisplay header -s, --stats event counter statistics -d, --disk disk statistics -D, --disk-sum summarize disk statistics -p, --partition <dev> partition specific statistics -S, --unit <char> define display unit -w, --wide wide output -t, --timestamp show timestamp -h, --help display this help and exit -V, --version output version information and exit For more details see vmstat(8).
Important : Par défaut la commande vmstat affiche des informations depuis le démarrage du système.
mpstat
La commande mpstat affiche des statistiques détaillées sur le CPU :
[root@centos7 ~]# mpstat Linux 3.10.0-229.4.2.el7.x86_64 (centos7.fenestros.loc) 11/02/2015 _x86_64_ (1 CPU) 03:19:32 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 03:19:32 PM all 9.38 0.14 2.52 0.31 0.00 0.24 0.00 0.00 0.00 87.42
Dans le cas où vous avez plusieurs processeurs ou coeurs, vous pouvez visualiser ces mêmes informations par unité de traitement :
[root@centos7 ~]# mpstat -P ALL Linux 3.10.0-229.4.2.el7.x86_64 (centos7.fenestros.loc) 11/02/2015 _x86_64_ (1 CPU) 03:20:06 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 03:20:06 PM all 9.42 0.14 2.53 0.31 0.00 0.24 0.00 0.00 0.00 87.36 03:20:06 PM 0 9.42 0.14 2.53 0.31 0.00 0.24 0.00 0.00 0.00 87.36
Pour afficher 5 jeux de statistiques à des intervales de 2 secondes pour tous les unités de traitement, il convient d'utiliser la commande suivante :
[root@centos7 ~]# mpstat -P ALL 2 5 Linux 3.10.0-229.4.2.el7.x86_64 (centos7.fenestros.loc) 11/02/2015 _x86_64_ (1 CPU) 03:20:43 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 03:20:45 PM all 27.46 0.00 7.04 0.00 0.00 0.00 0.00 0.00 0.00 65.49 03:20:45 PM 0 27.46 0.00 7.04 0.00 0.00 0.00 0.00 0.00 0.00 65.49 03:20:45 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 03:20:47 PM all 24.83 0.00 5.37 0.00 0.00 0.67 0.00 0.00 0.00 69.13 03:20:47 PM 0 24.83 0.00 5.37 0.00 0.00 0.67 0.00 0.00 0.00 69.13 03:20:47 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 03:20:49 PM all 17.95 0.00 4.49 0.00 0.00 0.00 0.00 0.00 0.00 77.56 03:20:49 PM 0 17.95 0.00 4.49 0.00 0.00 0.00 0.00 0.00 0.00 77.56 03:20:49 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 03:20:51 PM all 18.18 0.00 3.90 0.00 0.00 0.00 0.00 0.00 0.00 77.92 03:20:51 PM 0 18.18 0.00 3.90 0.00 0.00 0.00 0.00 0.00 0.00 77.92 03:20:51 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 03:20:53 PM all 24.14 0.00 6.21 0.00 0.00 0.00 0.00 0.00 0.00 69.66 03:20:53 PM 0 24.14 0.00 6.21 0.00 0.00 0.00 0.00 0.00 0.00 69.66 Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle Average: all 22.39 0.00 5.36 0.00 0.00 0.13 0.00 0.00 0.00 72.12 Average: 0 22.39 0.00 5.36 0.00 0.00 0.13 0.00 0.00 0.00 72.12
Les options de cette commande sont :
[root@centos7 ~]# mpstat --help Usage: mpstat [ options ] [ <interval> [ <count> ] ] Options are: [ -A ] [ -u ] [ -V ] [ -I { SUM | CPU | SCPU | ALL } ] [ -P { <cpu> [,...] | ON | ALL } ]
sar
La commande sar permet de surveiller toutes les ressources du système selon l'option qui est passée en argument à la commande. Quelques options importantes sont :
Option | Description |
---|---|
-u | Pourcentage d'utilisation du CPU |
-q | Nombre de processus en attente |
-r | Utilisation de la mémoire centrale |
-w | Surveillance du swapping |
-p | Surveillance de la pagination |
-b | Utilisation des tampons |
-d | Utilisation des disques |
Sous RHEL/CentOS 7 la commande /usr/lib64/sa/sadc permet de collecter les informations :
[root@centos7 ~]# ls /usr/lib64/sa sa1 sa2 sadc
Le script /usr/lib64/sa/sa1 exécute la commande sadc. Ce script prend deux options :
Option | Description |
---|---|
-t | L'interval entre les collectes |
-n | Nombre de collectes |
Le script /usr/lib64/sa/sa2 exécute la commande sar et consigne les informations dans un fichier au format /var/log/sa/sar<jj>.
Pour pouvoir fonctionner correctement, ces scripts doivent être appelés par cron.
Modifiez le fichier /etc/cron.d/sysstat ainsi :
[root@centos7 ~]# cat /etc/cron.d/sysstat # Run system activity accounting tool every 10 minutes # */10 * * * * root /usr/lib64/sa/sa1 1 1 */2 * * * * root /usr/lib64/sa/sa1 1 1 # 0 * * * * root /usr/lib64/sa/sa1 600 6 & # Generate a daily summary of process accounting at 23:53 53 23 * * * root /usr/lib64/sa/sa2 -A
Attendez deux minutes puis saisissez les commandes suivantes :
[root@centos7 ~]# sar Linux 3.10.0-229.4.2.el7.x86_64 (centos7.fenestros.loc) 11/02/2015 _x86_64_ (1 CPU) 02:20:02 PM CPU %user %nice %system %iowait %steal %idle 02:30:01 PM all 12.95 0.01 3.36 0.01 0.00 83.67 02:40:01 PM all 27.64 0.50 7.84 0.06 0.00 63.96 02:50:01 PM all 11.56 2.46 4.59 1.18 0.00 80.21 03:00:01 PM all 0.45 0.01 0.64 0.03 0.00 98.88 03:10:01 PM all 0.38 0.01 0.61 0.01 0.00 98.98 03:20:01 PM all 25.80 0.02 6.68 0.85 0.00 66.66 03:28:02 PM all 21.59 0.06 6.84 0.21 0.00 71.31 03:30:01 PM all 22.88 0.01 5.76 0.00 0.00 71.35 03:32:01 PM all 11.34 0.01 2.99 0.11 0.00 85.55 Average: all 13.21 0.41 4.01 0.30 0.00 82.06
[root@centos7 ~]# sar -u 5 3 Linux 3.10.0-229.4.2.el7.x86_64 (centos7.fenestros.loc) 11/02/2015 _x86_64_ (1 CPU) 03:34:01 PM CPU %user %nice %system %iowait %steal %idle 03:34:06 PM all 29.73 0.00 14.19 0.00 0.00 56.08 03:34:11 PM all 17.62 0.00 4.40 0.00 0.00 77.98 03:34:16 PM all 4.75 0.00 1.30 0.00 0.00 93.95 Average: all 15.55 0.00 5.68 0.00 0.00 78.78
[root@centos7 ~]# sar -r 5 3 Linux 3.10.0-229.4.2.el7.x86_64 (centos7.fenestros.loc) 11/02/2015 _x86_64_ (1 CPU) 03:34:48 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 03:34:53 PM 137708 1653916 92.31 20 561940 2950052 60.66 776232 539396 12 03:34:58 PM 130988 1660636 92.69 20 566552 3000196 61.69 779820 542436 20 03:35:03 PM 131360 1660264 92.67 20 566584 2999016 61.66 779288 542472 48 Average: 133352 1658272 92.56 20 565025 2983088 61.33 778447 541435 27
[root@centos7 ~]# sar -w 5 3 Linux 3.10.0-229.4.2.el7.x86_64 (centos7.fenestros.loc) 11/02/2015 _x86_64_ (1 CPU) 03:35:51 PM proc/s cswch/s 03:35:56 PM 0.00 608.04 03:36:01 PM 1.06 531.75 03:36:06 PM 25.94 1226.28 Average: 8.36 767.19
[root@centos7 ~]# sar -b 5 3 Linux 3.10.0-229.4.2.el7.x86_64 (centos7.fenestros.loc) 11/02/2015 _x86_64_ (1 CPU) 03:36:09 PM tps rtps wtps bread/s bwrtn/s 03:36:14 PM 0.00 0.00 0.00 0.00 0.00 03:36:19 PM 0.00 0.00 0.00 0.00 0.00 03:36:24 PM 2.32 0.00 2.32 0.00 31.79 Average: 0.89 0.00 0.89 0.00 12.25
[root@centos7 ~]# sar -d 5 3 Linux 3.10.0-229.4.2.el7.x86_64 (centos7.fenestros.loc) 11/02/2015 _x86_64_ (1 CPU) 03:36:46 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 03:36:51 PM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:36:51 PM dev8-0 0.31 0.00 2.45 8.00 0.00 0.00 0.00 0.00 03:36:51 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 03:36:56 PM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:36:56 PM dev8-0 4.31 0.00 55.38 12.86 0.04 9.36 1.93 0.83 03:36:56 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 03:37:01 PM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:37:01 PM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util Average: dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: dev8-0 1.49 0.00 18.63 12.53 0.01 8.73 1.80 0.27
[root@centos7 ~]# sar -p 5 3 Linux 3.10.0-229.4.2.el7.x86_64 (centos7.fenestros.loc) 11/02/2015 _x86_64_ (1 CPU) 03:37:16 PM CPU %user %nice %system %iowait %steal %idle 03:37:21 PM all 38.30 0.00 7.31 0.00 0.00 54.39 03:37:26 PM all 45.81 0.00 9.58 0.00 0.00 44.61 03:37:31 PM all 33.33 0.00 7.67 0.00 0.00 59.00 Average: all 39.11 0.00 8.18 0.00 0.00 52.71
[root@centos7 ~]# sar -v 5 3 Linux 3.10.0-229.4.2.el7.x86_64 (centos7.fenestros.loc) 11/02/2015 _x86_64_ (1 CPU) 03:38:44 PM dentunusd file-nr inode-nr pty-nr 03:38:49 PM 136266 5792 122548 2 03:38:54 PM 136266 5792 122548 2 03:38:59 PM 136266 5792 122548 2 Average: 136266 5792 122548 2
Les options de cette commande sont :
[root@centos7 ~]# sar --help Usage: sar [ options ] [ <interval> [ <count> ] ] Options are: [ -A ] [ -B ] [ -b ] [ -C ] [ -d ] [ -H ] [ -h ] [ -p ] [ -q ] [ -R ] [ -r ] [ -S ] [ -t ] [ -u [ ALL ] ] [ -V ] [ -v ] [ -W ] [ -w ] [ -y ] [ -I { <int> [,...] | SUM | ALL | XALL } ] [ -P { <cpu> [,...] | ALL } ] [ -m { <keyword> [,...] | ALL } ] [ -n { <keyword> [,...] | ALL } ] [ -j { ID | LABEL | PATH | UUID | ... } ] [ -f [ <filename> ] | -o [ <filename> ] | -[0-9]+ ] [ -i <interval> ] [ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]
Utilisation des commandes en production
Identifier un système limité par le processeur
Dans ce cas utilisez les commandes suivantes :
- uptime ou w
- vmstat
- mpstat -P ALL
- sar -u
- iostat -c
Identifier un système ayant un problème de mémoire
Dans ce cas utilisez les commandes suivantes :
- free
- sar -B
Identifier un système ayant un problème d'E/S
Utilisez la commande :
- iostat -d -x
Modules usb
L'USB (Universal Serial Bus) est un bus de données qui peut offrir des taux de transfert jusqu'à 480Mb/s sous la version 2.0 et jusqu'à 4.8 Gb/s sous la version 3.0. Les modules nécessaires pour les contrôleurs USB sont :
Version USB | Module | Nom Complet |
---|---|---|
1.0\1.1 | UHCI | Universal Controller Host Interface |
OHCI | Open Controller Host Interface | |
2.0 | EHCI | Enhanced Host Controller Interface |
3.0 | XHCI | Extensible Host Controller Interface |
Le tableau suivant liste les modules courrament chargés en fonction du périphérique utilisé :
Module | Type de Périphérique |
---|---|
usb_storage | Supports de masse |
usbhid | Periphériques HID (Human Interface Device) |
snd-usb-audio | Cartes son usb |
usbvidéo | Cartes vidéo et d'acquisition |
irda-usb | Périphériques infrarouges |
usbnet | Cartes réseaux usb |
Les modules peuvent être chargés par un des moyens suivants :
- INITrd,
- Le processus init,
- kmod, d'une manière dynamique et transparente lors du branchement du périphérique, en utilisant le fichier /lib/modules/2.6.18-194.3.1.el5/modules.usbmap,
- udev,
- manuellement.
A faire : Branchez une clef USB avant de continuer. Si vous utilisez VirtualBox, activez la clef dans votre machine virtuelle grâce aux menus Périphériques > Périphériques USB > le_nom_de_votre_clef.
udev
Depuis le noyau Linux 2.6 Linux est capable de détecter des périphériques branchés à chaud. Cette technologie s'appelle le hotplugging. Le hotplugging est obtenu grâce à l'utilisation de trois composants :
- Udev,
- HAL,
- Dbus.
Les rôles de chaque composant sont les suivants :
- Udev se charge de créer et supprimer d'une manière dynamique les nœuds dans le répertoire /dev,
- HAL obtient des informations à partir d'Udev et créé un fichier au format XML représentant le périphérique branché. Il informe ensuite Nautilus en utilisant le Dbus,
- Dbus joue le rôle d'un bus système qui est utilisé pour la communication inter-processus.
Lors de démarrage de Linux, Udev joue un rôle important :
- Au démarrage tmpfs est monté sur /dev,
- Udev copie les éventuels nœuds statiques de /lib/udev/devices vers /dev,
- le démon udevd collecte des données appelées uevents du noyau et cherche une règle correspondante dans le répertoire /lib/udev/rules.d/,
- Udev crée les nœuds et liens symboliques spécifiés dans la règle identifiée,
- Udev stocke les règles contenues dans /lib/udev/rules.d/*.rules en mémoire,
- En cas de modification des ces règles, Udev met à jour la mémoire.
Udev repose sur le filesystem sysfs monté sur /sys qui permet de rendre les périphériques visibles à Udev dans l'User Space. Par exemple, lors du branchement d'une clé USB, Udev crée /dev/sdb1 automatiquement et utilise les informations contenues dans le fichier /lib/modules/`uname -r`/modules.alias pour trouver le pilote nécessaire :
Le fichier de configuration principal d'Udev est /etc/udev/udev.conf :
[root@centos7 ~]# cat /etc/udev/udev.conf # see udev(7) for details #udev_log="info"
Les fichiers de règles se trouvent dans /lib/udev/rules.d/ :
[root@centos7 ~]# ls /lib/udev/rules.d/ 10-dm.rules 61-gnome-bluetooth-rfkill.rules 77-mm-ericsson-mbm.rules 90-iprutils.rules 11-dm-lvm.rules 62-multipath.rules 77-mm-huawei-net-port-types.rules 90-pulseaudio.rules 11-dm-mpath.rules 63-md-raid-arrays.rules 77-mm-longcheer-port-types.rules 90-vconsole.rules 13-dm-disk.rules 64-btrfs.rules 77-mm-nokia-port-types.rules 91-drm-modeset.rules 40-libgphoto2.rules 65-libwacom.rules 77-mm-pcmcia-device-blacklist.rules 95-cd-devices.rules 40-redhat.rules 65-md-incremental.rules 77-mm-platform-serial-whitelist.rules 95-dm-notify.rules 40-usb_modeswitch.rules 65-sane-backends.rules 77-mm-simtech-port-types.rules 95-udev-late.rules 42-usb-hid-pm.rules 69-cd-sensors.rules 77-mm-telit-port-types.rules 95-upower-battery-recall-dell.rules 50-rbd.rules 69-dm-lvm-metad.rules 77-mm-usb-device-blacklist.rules 95-upower-battery-recall-fujitsu.rules 50-udev-default.rules 69-libmtp.rules 77-mm-usb-serial-adapters-greylist.rules 95-upower-battery-recall-gateway.rules 56-hpmud.rules 69-xorg-vmmouse.rules 77-mm-x22x-port-types.rules 95-upower-battery-recall-ibm.rules 60-alias-kmsg.rules 70-power-switch.rules 77-mm-zte-port-types.rules 95-upower-battery-recall-lenovo.rules 60-cdrom_id.rules 70-printers.rules 77-nm-olpc-mesh.rules 95-upower-battery-recall-toshiba.rules 60-fprint-autosuspend.rules 70-spice-vdagentd.rules 78-sound-card.rules 95-upower-csr.rules 60-keyboard.rules 70-touchpad-quirks.rules 80-drivers.rules 95-upower-hid.rules 60-net.rules 70-uaccess.rules 80-kvm.rules 95-upower-wup.rules 60-persistent-alsa.rules 70-wacom.rules 80-mm-candidate.rules 97-bluetooth-serial.rules 60-persistent-input.rules 71-biosdevname.rules 80-net-name-slot.rules 98-kexec.rules 60-persistent-serial.rules 71-seat.rules 80-udisks2.rules 98-rdma.rules 60-persistent-storage.rules 73-idrac.rules 81-kvm-rhel.rules 99-qemu-guest-agent.rules 60-persistent-storage-tape.rules 73-seat-late.rules 85-regulatory.rules 99-systemd.rules 60-persistent-v4l.rules 75-net-description.rules 85-usbmuxd.rules 60-raw.rules 75-probe_mtd.rules 90-alsa-restore.rules 61-accelerometer.rules 75-tty-description.rules 90-alsa-tools-firmware.rules
Important : Il vous est possible d'ajouter des règles si besoin est. Dans ce cas, créez un fichier 99-local.rules est éditez-le au lieu d'éditer les fichiers existants.
Comme indique le nom de chaque fichier, le contenu est composé de règles à l'attention d'udev. Le fichier des règles par défaut est le 50-udev-default.rules :
[root@centos7 ~]# cat /lib/udev/rules.d/50-udev-default.rules | more # do not edit this file, it will be overwritten on update SUBSYSTEM=="virtio-ports", KERNEL=="vport*", ATTR{name}=="?*", SYMLINK+="virtio-ports/$attr{name}" # select "system RTC" or just use the first one SUBSYSTEM=="rtc", ATTR{hctosys}=="1", SYMLINK+="rtc" SUBSYSTEM=="rtc", KERNEL=="rtc0", SYMLINK+="rtc", OPTIONS+="link_priority=-100" SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", IMPORT{builtin}="usb_id", IMPORT{builtin}="hwdb --subsystem=usb" SUBSYSTEM=="input", ENV{ID_INPUT}=="", IMPORT{builtin}="input_id" ENV{MODALIAS}!="", IMPORT{builtin}="hwdb --subsystem=$env{SUBSYSTEM}" ACTION!="add", GOTO="default_permissions_end" SUBSYSTEM=="tty", KERNEL=="ptmx", GROUP="tty", MODE="0666" SUBSYSTEM=="tty", KERNEL=="tty", GROUP="tty", MODE="0666" SUBSYSTEM=="tty", KERNEL=="tty[0-9]*", GROUP="tty", MODE="0620" SUBSYSTEM=="tty", KERNEL=="sclp_line[0-9]*", GROUP="tty", MODE="0620" SUBSYSTEM=="tty", KERNEL=="ttysclp[0-9]*", GROUP="tty", MODE="0620" SUBSYSTEM=="tty", KERNEL=="3270/tty[0-9]*", GROUP="tty", MODE="0620" SUBSYSTEM=="vc", KERNEL=="vcs*|vcsa*", GROUP="tty" KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout" SUBSYSTEM=="mem", KERNEL=="mem|kmem|port", GROUP="kmem", MODE="0640" SUBSYSTEM=="input", KERNEL=="js[0-9]*", MODE="0664" SUBSYSTEM=="video4linux", GROUP="video" SUBSYSTEM=="misc", KERNEL=="agpgart", GROUP="video" --More--
Chaque règle prend la forme suivante :
KEY, [KEY, …] NAME [, SYMLINK]
Chaque KEY est un champ au format type=valeur qui doit correspondre à un périphérique unique. La valeur de type peut prendre plusieurs formes :
Type | Description | Exemples |
---|---|---|
BUS | Type de bus | usb, scsi, ide |
KERNEL | Le nom par défault du périphérique donné par le noyau | hda, ttyUSB0, lp0 |
SUBSYSTEM | Le nom noyau du sous-système, généralement identique à la valeur du BUS | usb, scsi |
DRIVER | Le nom du pilote qui contrôle le périphérique | usb-storage |
ID | Le numéro du périphérique sur son bus | PCI bus id, USB id |
PLACE | Ne concerne que les périphériques USB et donne la position topologique du périphérique sur son bus | S/O |
SYSFS{filename} | Le nom du fichier dans /sys pour le périphérique. Ce fichier contient le fabricant, le label, le numéro de série et UUID du périphérique. La vérification de jusqu'à 5 fichiers est possible par règle | S/O |
PROGRAM | Ceci permet à Udev d'appeler un programme externe pour nommer un périphérique | S/O |
RESULT | Valeur à comparer au résultat de PROGRAM | S/O |
NAME et SYMLINK sont utilisées pour stipuler ce que Udev doit faire avec le périphérique :
Type | Description | Exemples |
---|---|---|
NAME | Le nome du nœud dans /dev | S/O |
SYMLINK | Le ou les lien(s) symbolique(s) qui pointe(nt) vers le NAME | S/O |
La commande udevadm
Pour obtenir de l'information sur un périphérique il convient d'utiliser la commande udevadm :
[root@centos7 ~]# udevadm info --query=all -n /dev/sda P: /devices/pci0000:00/0000:00:0d.0/ata3/host2/target2:0:0/2:0:0:0/block/sda N: sda S: disk/by-id/ata-VBOX_HARDDISK_VBc40eec8a-49b6b6f3 E: DEVLINKS=/dev/disk/by-id/ata-VBOX_HARDDISK_VBc40eec8a-49b6b6f3 E: DEVNAME=/dev/sda E: DEVPATH=/devices/pci0000:00/0000:00:0d.0/ata3/host2/target2:0:0/2:0:0:0/block/sda E: DEVTYPE=disk E: ID_ATA=1 E: ID_ATA_FEATURE_SET_PM=1 E: ID_ATA_FEATURE_SET_PM_ENABLED=1 E: ID_ATA_SATA=1 E: ID_ATA_SATA_SIGNAL_RATE_GEN2=1 E: ID_ATA_WRITE_CACHE=1 E: ID_ATA_WRITE_CACHE_ENABLED=1 E: ID_BUS=ata E: ID_MODEL=VBOX_HARDDISK E: ID_MODEL_ENC=VBOX\x20HARDDISK\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 E: ID_PART_TABLE_TYPE=dos E: ID_REVISION=1.0 E: ID_SERIAL=VBOX_HARDDISK_VBc40eec8a-49b6b6f3 E: ID_SERIAL_SHORT=VBc40eec8a-49b6b6f3 E: ID_TYPE=disk E: MAJOR=8 E: MINOR=0 E: MPATH_SBIN_PATH=/sbin E: SUBSYSTEM=block E: TAGS=:systemd: E: USEC_INITIALIZED=957366
Les options de la commande
Les options de la commande udevadm sont :
[root@centos7 ~]# udevadm --help Usage: udevadm [--help] [--version] [--debug] COMMAND [COMMAND OPTIONS] info query sysfs or the udev database trigger request events from the kernel settle wait for the event queue to finish control control the udev daemon monitor listen to kernel and udev events hwdb maintain the hardware database index test test an event run test-builtin test a built-in command [root@centos7 ~]# udevadm info --help Usage: udevadm info OPTIONS --query=<type> query device information: name name of device node symlink pointing to node path sys device path property the device properties all all values --path=<syspath> sys device path used for query or attribute walk --name=<name> node or symlink name used for query or attribute walk --root prepend dev directory to path names --attribute-walk print all key matches while walking along the chain of parent devices --device-id-of-file=<file> print major:minor of device containing this file --export export key/value pairs --export-prefix export the key name with a prefix --export-db export the content of the udev database --cleanup-db cleanup the udev database --help
Système de fichiers /sys
Le système de fichiers virtuel /sys a été introduit avec le noyau Linux 2.6. Son rôle est de décrire le matériel pour udev.
Saisissez la commande suivante :
[root@centos7 ~]# ls -l /sys total 0 drwxr-xr-x. 2 root root 0 Oct 28 09:40 block drwxr-xr-x. 24 root root 0 Oct 28 09:40 bus drwxr-xr-x. 45 root root 0 Oct 28 09:40 class drwxr-xr-x. 4 root root 0 Oct 28 09:40 dev drwxr-xr-x. 11 root root 0 Oct 28 09:40 devices drwxr-xr-x. 5 root root 0 Oct 28 09:40 firmware drwxr-xr-x. 6 root root 0 Oct 28 09:40 fs drwxr-xr-x. 2 root root 0 Oct 28 09:40 hypervisor drwxr-xr-x. 9 root root 0 Oct 28 09:40 kernel drwxr-xr-x. 146 root root 0 Oct 28 09:40 module drwxr-xr-x. 2 root root 0 Oct 28 09:40 power
Chaque répertoire contient des informations :
- block
- contient des informations sur les périphériques bloc
- bus
- contient des informations sur les bus de données
- class
- contient des informations sur des classes de matériel
- devices
- contient des informations sur la position des périphériques sur les bus
- firmware
- contient, entre autre, des informations sur l'ACPI
- module
- contient des informations sur les modules du noyau
- power
- contient des informations sur la gestion de l'énergie
- fs
- contient des informations sur les systèmes de fichiers
Pour illustrer ceci, saisissez la commande suivante :
[root@centos7 ~]# cat /sys/block/sda/sda1/size 409600
Ce chiffre correspond aux nombre de secteurs.
Limitation des ressources
ulimit
Les ressources disponibles aux utilisateurs peuvent être limitées par l'utilisation de la commande ulimit.
La commande ulimit gère deux types de limite, la limite hard en utilisant l'option -H et la limite soft en utilisant l'option -S. Seul root peut positionner une limite hard et ceci à condition que la limite ne dépasse pas les ressources réelles.
La limite soft est la limite imposée à l'utilisateur par défaut tandis que la limite hard est la limite que l'utilisateur peut atteindre en utilisant la commande ulimit lui-même.
L'utilisateur root peut paramétrer les limites accordées en éditant la fichier /etc/security/limits.conf :
[root@centos7 ~]# cat /etc/security/limits.conf # /etc/security/limits.conf # #This file sets the resource limits for the users logged in via PAM. #It does not affect resource limits of the system services. # #Also note that configuration files in /etc/security/limits.d directory, #which are read in alphabetical order, override the settings in this #file in case the domain is the same or more specific. #That means for example that setting a limit for wildcard domain here #can be overriden with a wildcard setting in a config file in the #subdirectory, but a user specific setting here can be overriden only #with a user specific setting in the subdirectory. # #Each line describes a limit for a user in the form: # #<domain> <type> <item> <value> # #Where: #<domain> can be: # - a user name # - a group name, with @group syntax # - the wildcard *, for default entry # - the wildcard %, can be also used with %group syntax, # for maxlogin limit # #<type> can have the two values: # - "soft" for enforcing the soft limits # - "hard" for enforcing hard limits # #<item> can be one of the following: # - core - limits the core file size (KB) # - data - max data size (KB) # - fsize - maximum filesize (KB) # - memlock - max locked-in-memory address space (KB) # - nofile - max number of open file descriptors # - rss - max resident set size (KB) # - stack - max stack size (KB) # - cpu - max CPU time (MIN) # - nproc - max number of processes # - as - address space limit (KB) # - maxlogins - max number of logins for this user # - maxsyslogins - max number of logins on the system # - priority - the priority to run user process with # - locks - max number of file locks the user can hold # - sigpending - max number of pending signals # - msgqueue - max memory used by POSIX message queues (bytes) # - nice - max nice priority allowed to raise to values: [-20, 19] # - rtprio - max realtime priority # #<domain> <type> <item> <value> # #* soft core 0 #* hard rss 10000 #@student hard nproc 20 #@faculty soft nproc 20 #@faculty hard nproc 50 #ftp hard nproc 0 #@student - maxlogins 4 # End of file
Important : La valeur de la limite peut être un nombre ou le mot unlimited.
Par exemple, si root inscrit les deux ligne suivantes dans le fichier /etc/security/limits.conf :
... trainee soft nofile 1024 trainee hard nofile 4096 ...
la limite du nombre de fichiers ouverts simultanément par trainee est de 1 024. Par contre, trainee a la possibilité d'augmenter cette limite jusqu'à 4 096 en utilisant la commande suivante :
$ ulimit -n 4096
Pour consulter la liste des limites actuelles, il convient d'utiliser la commande ulimit avec l'option -a :
[root@centos7 ~]# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 6929 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 6929 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
Options de la commande
Les options de ulimit sont :
[root@centos7 ~]# help ulimit ulimit: ulimit [-SHacdefilmnpqrstuvx] [limit] Modify shell resource limits. Provides control over the resources available to the shell and processes it creates, on systems that allow such control. Options: -S use the `soft' resource limit -H use the `hard' resource limit -a all current limits are reported -b the socket buffer size -c the maximum size of core files created -d the maximum size of a process's data segment -e the maximum scheduling priority (`nice') -f the maximum size of files written by the shell and its children -i the maximum number of pending signals -l the maximum size a process may lock into memory -m the maximum resident set size -n the maximum number of open file descriptors -p the pipe buffer size -q the maximum number of bytes in POSIX message queues -r the maximum real-time scheduling priority -s the maximum stack size -t the maximum amount of cpu time in seconds -u the maximum number of user processes -v the size of virtual memory -x the maximum number of file locks If LIMIT is given, it is the new value of the specified resource; the special LIMIT values `soft', `hard', and `unlimited' stand for the current soft limit, the current hard limit, and no limit, respectively. Otherwise, the current value of the specified resource is printed. If no option is given, then -f is assumed. Values are in 1024-byte increments, except for -t, which is in seconds, -p, which is in increments of 512 bytes, and -u, which is an unscaled number of processes. Exit Status: Returns success unless an invalid option is supplied or an error occurs.
Groupes de Contrôle
Les Groupes de Contrôles (Control Groups) aussi appelés CGroups, sont une nouvelle façon sous RHEL/CentOS 7 de contrôler et de limiter des ressources. Les groupes de contrôle permettent l'allocation de ressources, même d'une manière dynamique pendant que le système fonctionne, telles le temps processeur, la mémoire système, la bande réseau, ou une combinaison de ces ressources parmi des groupes de tâches (processus) définis par l'utilisateur et exécutés sur un système.
Les groupes de contrôle sont organisés de manière hiérarchique, comme des processus. Par contre, la comparaison entre les deux démontre que tandis que les processus se trouvent dans une arborescence unique descandant tous du processus init et héritant de l'environnement de leurs parents, les contrôles groupes peuvent être multiples donnant lieu à des arborescences ou hiérarchies multiples qui héritent de certains attributs de leurs groupes de contrôle parents.
Ces hiérarchies multiples et séparés sont necéssaires parce que chaque hiérarchie est attaché à un ou plusieurs sous-système(s) aussi appelés des Contrôleurs de Ressources ou simplement des Contrôleurs. Les contrôleurs disponibles sous RHEl/CentOS 7 sont :
- blkio - utilisé pour établir des limites sur l'accès des entrées/sorties à partir et depuis des périphériques blocs,
- cpu - utilisé pour fournir aux tâches des groupes de contrôle accès au CPU grâce au planificateur,
- cpuacct - utilisé pour produire des rapports automatiques sur les ressources CPU utilisées par les tâches dans un groupe de contrôle,
- cpuset - utilisé pour assigner des CPU individuels sur un système multicoeur et des noeuds de mémoire à des tâches dans un groupe de contrôle,
- devices - utilisé pour autoriser ou pour refuser l'accès des tâches aux périphériques dans un groupe de contrôle,
- freezer - utilisé pour suspendre ou pour réactiver les tâches dans un groupe de contrôle,
- memory - utilisé pour établir les limites d'utilisation de la mémoire par les tâches d'un groupe de contrôle et pour génèrer des rapports automatiques sur les ressources rmémoire utilisées par ces tâches,
- net_cls - utilisé pour repèrer les paquets réseau avec un identifiant de classe (classid) afin de permettre au contrôleur de trafic Linux, tc, d'identifier les paquets provenant d'une tâche particulière d'un groupe de contrôle.
- perf_event - utilisé pour permettre le monitoring des CGroups avec l'outil perf,
- hugetlb - utilisé pour limiter des ressources sur des pages de mémoire virtuelle de grande taille.
Pour visualiser les hiérarchies, il convient d'utiliser la commande suivante :
[root@centos7 ~]# lssubsys -am cpuset /sys/fs/cgroup/cpuset cpu,cpuacct /sys/fs/cgroup/cpu,cpuacct memory /sys/fs/cgroup/memory devices /sys/fs/cgroup/devices freezer /sys/fs/cgroup/freezer net_cls /sys/fs/cgroup/net_cls blkio /sys/fs/cgroup/blkio perf_event /sys/fs/cgroup/perf_event hugetlb /sys/fs/cgroup/hugetlb
Sous RHEL/CentOS 7, Systemd organise les processus dans chaque CGroup. Par exemple tous les processus démarrés par le serveur Apache se trouveront dans le même CGroup, y compris les scripts CGI. Ceci implique que la gestion des ressources en utilisant des hiérarchies est couplé avec l'arborescence des unités de Systemd.
En haut de l'arborescence des unités de Systemd se trouve la tranche root - -.slice, dont dépend :
- le system.slice - l'emplacement des services système,
- le user.slice - l'emplacement des sessions des utilisateurs,
- le machine.slice - l'emplacement des machines virtuelles et conteneurs.
En dessous des tranches peuvent se trouver :
- des scopes - des processus crées par fork,
- des services - des processus créés par une Unité.
Les slices peuvent être visualisés avec la commande suivante :
[root@centos7 ~]# systemctl list-units --type=slice UNIT LOAD ACTIVE SUB DESCRIPTION -.slice loaded active active Root Slice system-getty.slice loaded active active system-getty.slice system.slice loaded active active System Slice user-0.slice loaded active active user-0.slice user-1000.slice loaded active active user-1000.slice user.slice loaded active active User and Session Slice 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. 6 loaded units listed. Pass --all to see loaded but inactive units, too. To show all installed unit files use 'systemctl list-unit-files'.
L'arborescence des unités de Systemd est la suivante :
[root@centos7 ~]# systemd-cgls ├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 ├─user.slice │ └─user-1000.slice │ └─session-2.scope │ ├─ 5577 sshd: trainee [priv] │ ├─ 6004 sshd: trainee@pts/0 │ ├─ 6167 -bash │ ├─ 6217 su - │ ├─ 6245 -bash │ ├─13457 systemd-cgls │ └─13459 systemd-cgls └─system.slice ├─upower.service │ └─3478 /usr/libexec/upowerd ├─polkit.service │ └─822 /usr/lib/polkit-1/polkitd --no-debug ├─wpa_supplicant.service │ └─821 /usr/sbin/wpa_supplicant -u -f /var/log/wpa_supplicant.log -c /etc/wpa_supplicant/wpa_supplicant.conf -u -f /var/log/wpa_supplicant.log -P /var/run/wpa_suppli ├─crond.service │ └─793 /usr/sbin/crond -n ├─atd.service │ └─789 /usr/sbin/atd -f ├─tuned.service │ └─762 /usr/bin/python -Es /usr/sbin/tuned -l -P ├─simplegateway.service │ ├─ 760 /bin/sh /opt/JWrapper-Remote Access/JWAppsSharedConfig/SimpleGatewayService/service_launch.sh │ ├─ 3202 /opt/JWrapper-Remote Access/JWrapper-Linux64JRE-00028603412-complete/bin/Remote Access -cp /opt/JWrapper-Remote Access/JWrapper-JWrapper-00041369502-complet │ ├─ 3384 /opt/JWrapper-Remote Access/JWrapper-Linux64JRE-00028603412-complete/bin/Remote Access Monitoring -cp /opt/JWrapper-Remote Access/JWrapper-JWrapper-00041369 │ ├─13111 /bin/sh /opt/JWrapper-Remote Access/JWAppsSharedConfig/SimpleGatewayService/service_launch.sh │ └─13458 sleep 1 ├─postfix.service │ ├─1810 /usr/libexec/postfix/master -w │ ├─1833 pickup -l -t unix -u │ └─1834 qmgr -l -t unix -u ├─cups.service │ └─756 /usr/sbin/cupsd -f ├─sshd.service │ └─755 /usr/sbin/sshd -D ├─docker.service │ ├─750 /bin/sh -c /usr/bin/docker-current daemon $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_NETWORK_OPTIONS $ADD_REGISTRY $ │ ├─753 /usr/bin/docker-current daemon --selinux-enabled │ └─754 /usr/bin/forward-journald -tag docker ├─NetworkManager.service │ ├─ 678 /usr/sbin/NetworkManager --no-daemon │ └─1968 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-enp0s3.pid -lf /var/lib/NetworkManager/dhclient-3b386b69-23e8-4940-80e0-e16d346d43 ├─abrt-xorg.service │ └─586 /usr/bin/abrt-watch-log -F Backtrace /var/log/Xorg.0.log -- /usr/bin/abrt-dump-xorg -xD ├─abrt-oops.service │ └─582 /usr/bin/abrt-watch-log -F BUG: WARNING: at WARNING: CPU: INFO: possible recursive locking detected ernel BUG at list_del corruption list_add corruption do_IR ├─abrtd.service │ └─581 /usr/sbin/abrtd -d -s ├─dbus.service │ └─513 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation ├─chronyd.service │ └─525 /usr/sbin/chronyd ├─firewalld.service │ └─510 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid ├─avahi-daemon.service │ ├─507 avahi-daemon: running [centos7.local │ └─530 avahi-daemon: chroot helpe ├─ModemManager.service │ └─506 /usr/sbin/ModemManager ├─smartd.service │ └─505 /usr/sbin/smartd -n -q never ├─libstoragemgmt.service │ └─494 /usr/bin/lsmd -d ├─gssproxy.service │ └─517 /usr/sbin/gssproxy -D ├─systemd-logind.service │ └─492 /usr/lib/systemd/systemd-logind ├─rsyslog.service │ └─488 /usr/sbin/rsyslogd -n ├─alsa-state.service │ └─487 /usr/sbin/alsactl -s -n 19 -c -E ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf --initfile=/lib/alsa/init/00main rdaemon ├─auditd.service │ ├─463 /sbin/auditd -n │ ├─473 /sbin/audispd │ └─475 /usr/sbin/sedispatch ├─systemd-udevd.service │ └─381 /usr/lib/systemd/systemd-udevd ├─lvm2-lvmetad.service │ └─378 /usr/sbin/lvmetad -f ├─systemd-journald.service │ └─349 /usr/lib/systemd/systemd-journald └─system-getty.slice └─getty@tty1.service └─798 /sbin/agetty --noclear tty1 linux
En utilisant Systemd, plusieurs ressources peuvent être limitées :
- CPUShares - par défault 1024,
- MemoryLimit - limite exprimée en Mo ou en Go. Pas de valeur par défaut,
- BlockIOWeight - valeur entre 10 et 1000. Pas de valeur par défaut,
- StartupCPUShares - comme CPUShares mais uniquement appliqué pendant le démarrage,
- StartupBlockIOWeight - comme BlockIOWeight mais uniquement appliqué pendant le démarrage,
- CPUQuota - utilisé pour limiter le temps CPU, même quand le système ne fait rien.
Important : Consultez le manuel systemd.resource-control(5) pour voir les paramètres CGroup qui peuvent être passés à systemctl.
LAB #1 - Travailler avec les cgroups sous RHEL/CentOS 7
Créez un service appelé foo :
[root@centos7 ~]# vi /etc/systemd/system/foo.service [root@centos7 ~]# cat /etc/systemd/system/foo.service [Unit] Description=The foo service that does nothing useful After=remote-fs.target nss-lookup.target [Service] ExecStart=/usr/bin/sha1sum /dev/zero ExecStop=/bin/kill -WINCH ${MAINPID} [Install] WantedBy=multi-user.target
Consultez le statut du service foo :
[root@centos7 ~]# systemctl status foo.service ● foo.service - The foo service that does nothing useful Loaded: loaded (/etc/systemd/system/foo.service; disabled; vendor preset: disabled) Active: inactive (dead)
Démarrez et actives le service :
[root@centos7 ~]# systemctl start foo.service [root@centos7 ~]# systemctl enable foo.service Created symlink from /etc/systemd/system/multi-user.target.wants/foo.service to /etc/systemd/system/foo.service. [root@centos7 ~]# systemctl status foo.service ● foo.service - The foo service that does nothing useful Loaded: loaded (/etc/systemd/system/foo.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2016-06-15 13:13:17 CEST; 24s ago Main PID: 22256 (sha1sum) CGroup: /system.slice/foo.service └─22256 /usr/bin/sha1sum /dev/zero Jun 15 13:13:17 centos7.fenestros.loc systemd[1]: Started The foo service that does nothing useful. Jun 15 13:13:17 centos7.fenestros.loc systemd[1]: Starting The foo service that does nothing useful...
Notez que notre service a été placé dans la tranche system.slice :
[root@centos7 ~]# systemctl show -p Slice foo.service Slice=system.slice
Utilisez ps pour voir le pourcentage du CPU utilisé par ce service :
[root@centos7 ~]# ps -p 22256 -o pid,comm,cputime,%cpu PID COMMAND TIME %CPU 22256 sha1sum 00:00:46 94.8
Fixez maintenant la valeur de CPUShares pour ce service à 250 :
[root@centos7 ~]# systemctl set-property foo.service CPUShares=250
Cette limite est permenante et a été inscrite dans le fichier 50-CPUShares.conf qui se trouve dans le répertoire /etc/systemd/system/foo.service.d :
[root@centos7 ~]# ls /etc/systemd/system/foo.service.d 50-CPUShares.conf [root@centos7 ~]# cat /etc/systemd/system/foo.service.d/50-CPUShares.conf [Service] CPUShares=250
Important : En utilisant l'option –runtime avec la commande sysetmctl set-property il est possible d'appliquer la limite d'une manière provisoire.
Appliquez cette modification en rechargeant systemd et en re-démarrant le service foo.service :
[root@centos7 ~]# systemctl daemon-reload [root@centos7 ~]# systemctl restart foo.service
Vérifiez maintenant que la limite a été appliquée :
[root@centos7 ~]# cat /sys/fs/cgroup/cpu/system.slice/foo.service/cpu.shares 250 [root@centos7 ~]# systemctl show -p MainPID foo.service MainPID=27233 [root@centos7 ~]# cat /proc/27233/cgroup | grep foo 4:cpuacct,cpu:/system.slice/foo.service 1:name=systemd:/system.slice/foo.service
Créez maintenant le service bar :
[root@centos7 ~]# vi /etc/systemd/system/bar.service [root@centos7 ~]# cat /etc/systemd/system/bar.service [Unit] Description=The bar service that does nothing useful After=remote-fs.target nss-lookup.target [Service] ExecStart=/usr/bin/md5sum /dev/zero ExecStop=/bin/kill -WINCH ${MAINPID} [Install] WantedBy=multi-user.target
Fixez maintenant la limite de CPUShares pour ce service à 2000 :
[root@centos7 ~]# systemctl set-property bar.service CPUShares=2000 Failed to set unit properties on bar.service: Unit bar.service is not loaded. [root@centos7 ~]# systemctl start bar.service [root@centos7 ~]# systemctl enable bar.service Created symlink from /etc/systemd/system/multi-user.target.wants/bar.service to /etc/systemd/system/bar.service. [root@centos7 ~]# systemctl set-property bar.service CPUShares=2000
Appliquez la limite :
[root@centos7 ~]# systemctl daemon-reload [root@centos7 ~]# systemctl restart bar.service [root@centos7 ~]# systemctl status bar.service ● bar.service - The bar service that does nothing useful Loaded: loaded (/etc/systemd/system/bar.service; enabled; vendor preset: disabled) Drop-In: /etc/systemd/system/bar.service.d └─50-CPUShares.conf Active: active (running) since Wed 2016-06-15 13:37:54 CEST; 9s ago Main PID: 29515 (md5sum) CGroup: /system.slice/bar.service └─29515 /usr/bin/md5sum /dev/zero Jun 15 13:37:54 centos7.fenestros.loc systemd[1]: Started The bar service that does nothing useful. Jun 15 13:37:54 centos7.fenestros.loc systemd[1]: Starting The bar service that does nothing useful...
Re-démarrer les services foo et bar :
[root@centos7 ~]# systemctl restart foo.service [root@centos7 ~]# systemctl status foo.service ● foo.service - The foo service that does nothing useful Loaded: loaded (/etc/systemd/system/foo.service; enabled; vendor preset: disabled) Drop-In: /etc/systemd/system/foo.service.d └─50-CPUShares.conf Active: active (running) since Wed 2016-06-15 13:50:08 CEST; 11s ago Main PID: 652 (sha1sum) CGroup: /system.slice/foo.service └─652 /usr/bin/sha1sum /dev/zero Jun 15 13:50:08 centos7.fenestros.loc systemd[1]: Started The foo service that does nothing useful. Jun 15 13:50:08 centos7.fenestros.loc systemd[1]: Starting The foo service that does nothing useful... [root@centos7 ~]# systemctl restart bar.service [root@centos7 ~]# systemctl status bar.service ● bar.service - The bar service that does nothing useful Loaded: loaded (/etc/systemd/system/bar.service; enabled; vendor preset: disabled) Drop-In: /etc/systemd/system/bar.service.d └─50-CPUShares.conf Active: active (running) since Wed 2016-06-15 13:50:38 CEST; 12s ago Main PID: 810 (md5sum) CGroup: /system.slice/bar.service └─810 /usr/bin/md5sum /dev/zero Jun 15 13:50:38 centos7.fenestros.loc systemd[1]: Started The bar service that does nothing useful. Jun 15 13:50:38 centos7.fenestros.loc systemd[1]: Starting The bar service that does nothing useful...
Utilisez ps pour voir le pourcentage du CPU utilisé par les deux services :
[root@centos7 ~]# ps -p 652,810 -o pid,comm,cputime,%cpu PID COMMAND TIME %CPU 652 sha1sum 00:00:08 9.7 810 md5sum 00:00:45 78.9
Copyright © 2023 Hugh Norris.