Gestionnaire de démarrage

De The Linux Craftsman
Aller à la navigation Aller à la recherche

Introduction

Les services peuvent être démarrés via des scripts présents dans le répertoire /etc/init.d mais cela demande une intervention manuelle. Heureusement, il existe alors des répertoires /etc/rcX.d, qui contiennent les scripts permettant de démarrer / arrêter les services en fonction du runlevel de la machine.

Les scripts présents dans ces répertoires sont des liens symboliques vers les scripts présents dans /etc/init.d et faire cela manuellement est pénible, c'est là que l'utilitaire chkconfig va nous aider.

runlevel, kesako ?

Le fichier /etc/inittab

Le runlevel est le niveau de démarrage dans lequel se trouve le système. Pour information, ces runlevel sont détaillés dans le fichier /etc/inittab qui permet de définir le niveau de démarrage du système:

# 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:3:initdefault:

Dans cet exemple, le runlevel est à 3, c'est à dire multi-utilisateur sans interface graphique.

A manipuler avec précaution

Vous vous doutez bien que mettre le runlevel à 0 (halt) ou 6 (reboot) est tout sauf une bonne idée. En effet, la machine ma amorcer son démarrage, lire le fichier /etc/inittab et de suite redémarrer ou s’arrêter...

Voir le runlevel

Il suffit d'utiliser la commande du même nom

# runlevel
N 3

Configuration du niveau de démarrage des services

Pour configurer le niveau de démarrage d'un service, il existe deux possibilités:

  • On peut spécifier le ou les runlevel
chkconfig --level 3 dhcpd on
  • On peut faire confiance à l'éditeur du paquetage
chkconfig dhcpd on

Dans le deuxième cas, chkconfig va étudier le script de démarrage du service (dans cet exemple /etc/init.d/dhcpd) à la recherche des niveaux de démarrage et d'arrêt

#!/bin/sh
#
### BEGIN INIT INFO
# Provides: dhcpd
# Default-Start:
# Default-Stop:
# Should-Start: portreserve
# Required-Start: $network
# Required-Stop:
# Short-Description: Start and stop the DHCP server
# Description: dhcpd provides the Dynamic Host Configuration Protocol (DHCP)
#              server.
### END INIT INFO
#
# The fields below are left around for legacy tools (will remove later).
#
# chkconfig: - 65 35
# description: dhcpd provides the Dynamic Host Configuration Protocol (DHCP) \
#              server
# processname: dhcpd
# config: /etc/dhcp/dhcpd.conf
# config: /var/lib/dhcpd/dhcpd.leases
# pidfile: /var/run/dhcpd.pid

...

On peut apercevoir dans l'entête la ligne suivante:

# chkconfig: - 65 35

qui précise que dhcpd est tué en 35éme position et démarré en 65éme position:

# find /etc/rc* -name *dhcpd*
/etc/rc.d/rc0.d/K35dhcpd6
/etc/rc.d/rc0.d/K35dhcpd
/etc/rc.d/rc2.d/S65dhcpd
/etc/rc.d/rc2.d/K35dhcpd6
/etc/rc.d/rc3.d/S65dhcpd
/etc/rc.d/rc3.d/K35dhcpd6
/etc/rc.d/rc1.d/K35dhcpd6
/etc/rc.d/rc1.d/K35dhcpd
/etc/rc.d/rc6.d/K35dhcpd6
/etc/rc.d/rc6.d/K35dhcpd
/etc/rc.d/rc4.d/S65dhcpd
/etc/rc.d/rc4.d/K35dhcpd6
/etc/rc.d/rc5.d/S65dhcpd
/etc/rc.d/rc5.d/K35dhcpd6

Vérification

Pour vérifier le niveau de démarrage, il suffit de spécifier le nom du service

# chkconfig --list dhcpd
dhcpd           0:arrêt 1:arrêt 2:marche        3:marche        4:marche        5:marche        6:arrêt