Sous Linux en général, les services sont démarrés via des scripts présents dans le répertoire /etc/init.d.
C'est bien, mais cela demande une intervention manuelle. Il existe alors des répertoires /etc/rcX.d, qui permettent de lancer / arrêter les scripts en fonction du runlevel de la machine.
Red Hat & Co
En fait, les scripts présents dans ces répertoires ne sont rien d'autre que des liens symboliques vers les scripts présents dans /etc/init.d. Mais faire tout ça à la main, c'est parfois pénible. Dans les distributions basées sur Red Hat, l'utilitaire chkconfig permet de simplifier tout cela.
Imaginons que je vienne d'installer un serveur OpenLDAP, lancé par /etc/init.d/slapd. Je voudrais maintenant qu'il démarre automatiquement au boot de la machine. On détermine d'abord le niveau de runlevel actuel :
# runlevel N 3
On regarde le paramétrage de chkconfig pour le process slapd :
# chkconfig --list | grep slapd slapd 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt
Effectivement, le processus n'est pas lancé, quel que soit le runlevel. On va donc corriger cela pour le niveau actuel :
chkconfig --level 3 slapd on
On peut alors vérifier que ceci a été pris en compte :
# chkconfig --list | grep slapd slapd 0:arrêt 1:arrêt 2:arrêt 3:marche 4:arrêt 5:arrêt 6:arrêt
Dans le répertoire /etc/rc3.d, on a maintenant un script de démarrage :
# ls /etc/rc3.d/*slapd* /etc/rc3.d/S27slapd
Au prochain boot de la machine, le processus slapd sera bien lancé.
Si on veut empêcher un service de se lancer, il faut utiliser la commande chkconfig avec l'option off. Par exemple pour ne pas démarrer iptables :
# chkconfig --level 3 iptables off
Debian / Ubuntu
A noter que sur Ubuntu (et Debian), chkconfig est également disponible dans les dépôts.
On peut faire la même chose avec la commande update-rc.d. Par exemple pour supprimer le démarrage automatique de apache2 :
sudo update-rc.d -f apache2 remove Removing any system startup links for /etc/init.d/apache2 ... /etc/rc0.d/K09apache2 /etc/rc1.d/K09apache2 /etc/rc2.d/S91apache2 /etc/rc3.d/S91apache2 /etc/rc4.d/S91apache2 /etc/rc5.d/S91apache2 /etc/rc6.d/K09apache2
Arrêt et démarrage par init / Upstart
Depuis l'utilisation de upstart, on trouve également des fichiers de configuration dans le répertoire /etc/init. Par exemple, pour php5-fpm, il s'agit du fichier /etc/init/php5-fpm.conf.
Le contenu du fichier est le suivant :
# php5-fpm - The PHP FastCGI Process Manager description "The PHP FastCGI Process Manager" author "Ondřej Surý <ondrej@debian.org>" # Do not start at init #start on runlevel [2345] stop on runlevel [016] pre-start exec /usr/lib/php5/php5-fpm-checkconf respawn exec /usr/sbin/php5-fpm --nodaemonize --fpm-config /etc/php5/fpm/php-fpm.conf
On constate que les niveaux de démarrage sont fixés dans les ordres start ou stop. Par défaut, pour notre exemple, on démarre le service pour les runlevel 2, 3, 4 et 5.
Si on veut désactiver le service en totalité (pour le lancer manuellement, par exemple), on peut simplement mettre en commentaire la ligne commençant par start.