Dernière mise-à-jour : 2020/01/30 03:27

101.3 - Modifier les niveaux d'exécution / cibles et arrêter ou redémarrer le système (3/60)

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.confnom 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.

Arrêt du Système

La commande shutdown

Lors de l'arrêt de la machine, Linux procède, entre autre, aux tâches suivantes :

  • Il previent les utilisateurs,
  • Il arrête tous les services,
  • Il inscrit toutes les données sur disque,
  • Il démonte les systèmes de fichiers.

La commande utilisée pour arrêter le système est la commande shutdown :

shutdown [-t sec] [-akrhHPfnc] heure [message]

Options de la commande

Les options de cette commande sont :

Usage:    shutdown [-akrhHPfnc] [-t secs] time [warning message]
                  -a:      use /etc/shutdown.allow
                  -k:      don't really shutdown, only warn.
                  -r:      reboot after shutdown.
                  -h:      halt after shutdown.
                  -P:      halt action is to turn off power.
                  -H:      halt action is to just halt.
                  -f:      do a 'fast' reboot (skip fsck).
                  -F:      Force fsck on reboot.
                  -n:      do not go through "init" but go down real fast.
                  -c:      cancel a running shutdown.
                  -t secs: delay between warning and kill signal.
                  ** the "time" argument is mandatory! (try "now") **

Parmi les options les plus importantes, on note :

Option Description
-h Arrêter le système
-r Re-démarrer le système
-c Annuler l'opération shutdown en cours
-f Re-démarrer rapidement sans vérifier les systèmes de fichiers
-F Forcer la vérification des systèmes de fichiers lors du prochain démarrage

L'option heure peut prendre plusieurs valeurs :

Valeur Description
hh:mm L'heure à laquelle l'opération aura lieu
+m Nombre de minutes avant que l'opération aura lieu
now L'opération est immédiate

Important : Si l'opération est programmée pour dans moins de 5 minutes, les connexions supplémentaires sont interdites, y comprises les tentatives de connexion de root. Notez aussi que l'utilisation de la commande shutdown peut être accordée à d'autres utilisateurs de root en utilisant le fichier /etc/shutdown.allow.

Dans votre VM, ouvrez deux terminaux. Dans le premier passez en tant que root. Planifiez ensuite un redémarrage de la VM dans 30 minutes :

[root@centos7 ~]# shutdown -r +30

Broadcast message from trainee@centos.fenestros.loc
	(/dev/pts/0) at 10:12 ...

The system is going down for reboot in 30 minutes!

Dans le deuxième terminal est passez en tant que route. Annulez ensuite le shutdown :

[trainee@centos7 ~]$ su -
Mot de passe : 
[root@centos7 ~]# shutdown -c

Retournez au premier terminal et constatez le message affiché :

[root@centos7 ~]# shutdown -r +30

Broadcast message from trainee@centos.fenestros.loc
	(/dev/pts/0) at 10:12 ...

The system is going down for reboot in 30 minutes!


shutdown: Shutdown cancelled
[root@centos7 ~]#

La commande reboot

Cette commande redémarre le système. Quand le système fonctionne normalement, l'exécution de reboot appelle la commande shutdown -r.

Options de la commande

Les options de cette commande sont :

[root@centos7 ~]# reboot --help
Usage: reboot [OPTION]...
Reboot the system.

Options:
  -n, --no-sync               don't sync before reboot or halt
  -f, --force                 force reboot or halt, don't call shutdown(8)
  -p, --poweroff              switch off the power when called as halt
  -w, --wtmp-only             don't actually reboot or halt, just write wtmp
                                record
  -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

This command is intended to instruct the kernel to reboot or halt the system;
when run without the -f option, or when in a system runlevel other than 0 or 6,
it will actually execute /sbin/shutdown.


Report bugs to <upstart-devel@lists.ubuntu.com>

La commande halt

Cette commande arrête le système. Quand le système fonctionne normalement, l'exécution de halt appelle la commande shutdown -h.

Options de la commande

Les options de cette commande sont :

[root@centos7 ~]# halt --help
Usage: halt [OPTION]...
Halt the system.

Options:
  -n, --no-sync               don't sync before reboot or halt
  -f, --force                 force reboot or halt, don't call shutdown(8)
  -p, --poweroff              switch off the power when called as halt
  -w, --wtmp-only             don't actually reboot or halt, just write wtmp
                                record
  -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

This command is intended to instruct the kernel to reboot or halt the system;
when run without the -f option, or when in a system runlevel other than 0 or 6,
it will actually execute /sbin/shutdown.


Report bugs to <upstart-devel@lists.ubuntu.com>

La commande poweroff

Cette commande arrête le système et coupe l'alimentation électrique. Elle est l'équivalente de la commande halt -p. Quand le système fonctionne normalement, l'exécution de poweroff appelle la commande shutdown -hP.

Options de la commande

Les options de cette commande sont :

[root@centos7 ~]# poweroff --help
Usage: poweroff [OPTION]...
Power off the system.

Options:
  -n, --no-sync               don't sync before reboot or halt
  -f, --force                 force reboot or halt, don't call shutdown(8)
  -p, --poweroff              switch off the power when called as halt
  -w, --wtmp-only             don't actually reboot or halt, just write wtmp
                                record
  -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

This command is intended to instruct the kernel to reboot or halt the system;
when run without the -f option, or when in a system runlevel other than 0 or 6,
it will actually execute /sbin/shutdown.


Report bugs to <upstart-devel@lists.ubuntu.com>

La Commande wall

La commande wall envoie un message à tous les utilisateurs connectés, dont l’autorisation mesg(1) est positionnée à yes. Le message peut être fourni en tant qu’argument sur la ligne de commande, ou il peut être envoyé sur l’entrée standard de wall. Quand l’entrée standard est un terminal, le message doit se terminer par la touche EOF (Ctrl-D).La longueur du message est limitée à 20 lignes. Pour chaque invocation de wall, une notification sera écrite dans syslog avec la facilité LOG_USER et le niveau LOG_INFO.

Ouvrez donc un deuxième terminal via ssh en tant que trainee puis dans le premier envoyez un message :

[root@centos7 ~]# wall this is a message from root
[root@centos7 ~]# 
Broadcast message from root@centos7.fenestros.loc (pts/0) (Fri Sep 30 05:35:26 2016):

this is a message from root
[Enter]
[root@centos7 ~]# 

Constatez que le message est affiché dans le deuxième terminal :

[trainee@centos7 ~]$ 
Broadcast message from root@centos7.fenestros.loc (pts/0) (Fri Sep 30 05:35:26 2016):

this is a message from root                                                                             

Consultez maintenant la fin du fichier /var/log/messages :

[root@centos7 ~]# tail /var/log/messages
Sep 30 05:31:08 centos7 sh: Sleeping '' ''
Sep 30 05:34:16 centos7 sh: Sleeping '' ''
Sep 30 05:35:13 centos7 systemd: Started Session 311 of user trainee.
Sep 30 05:35:13 centos7 systemd-logind: New session 311 of user trainee.
Sep 30 05:35:13 centos7 systemd: Starting Session 311 of user trainee.
Sep 30 05:35:13 centos7 dbus[515]: [system] Activating service name='org.freedesktop.problems' (using servicehelper)
Sep 30 05:35:13 centos7 dbus-daemon: dbus[515]: [system] Activating service name='org.freedesktop.problems' (using servicehelper)
Sep 30 05:35:13 centos7 dbus[515]: [system] Successfully activated service 'org.freedesktop.problems'
Sep 30 05:35:13 centos7 dbus-daemon: dbus[515]: [system] Successfully activated service 'org.freedesktop.problems'
Sep 30 05:35:26 centos7 wall[27550]: wall: user root broadcasted 1 lines (29 chars)

Important : La commande wall ignore la variable d’environnement TZ. L’heure affichée dans la première page est basée sur les paramètres de régionalisation du système.


<html>

Copyright © 2004-2016 Hugh Norris.<br><br> <a rel=“license” href=“http://creativecommons.org/licenses/by-nc-nd/3.0/fr/”><img alt=“Licence Creative Commons” style=“border-width:0” src=“http://i.creativecommons.org/l/by-nc-nd/3.0/fr/88x31.png” /></a><br />Ce(tte) oeuvre est mise à disposition selon les termes de la <a rel=“license” href=“http://creativecommons.org/licenses/by-nc-nd/3.0/fr/”>Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Pas de Modification 3.0 France</a>.

</html>


Menu