Scripts RC

De Diablotins.org.


Manipuler les services dans /etc/rc.d et /usr/local/etc/rc.d/
Image:brush.png
rc(8) désigne les répertoires dans lesquels sont placés les scripts à exécuter au démarrage de la machine.Le premier, contient les services livrés avec le monde, ceux issus de ports, pour le second.



Sommaire

Fonction

Le système, à la lecture de /etc/rc.conf, parcours ces répertoires, en extrait les scripts, puis les exécutent en précisant l'argument «start».
De la même manière, lors de l'arrêt du système, les scripts sont appelés avec l'argument «stop».
Pour un usage ponctuel, ces scripts peuvent accepter d'autres arguments, tels que

  • restart
  • forcestart/forcestop
  • onestart/onestop

Et parfois, un bien pratique:

  • status

Depuis FreeBSD 5.x, un nouveau style hérité de NetBSD, rcNG, requiert l'affectation d'une variable dans rc.conf:

MonService_enable="YES"

Pour connaître cette entrée, tapez simplement:

 /usr/local/etc/rc.d/LeNomDuScript rcvar

Pseudomonarchia daemonum

La commande service(8) introduite en 7.3 va vous permettre de contrôler vos démons:

service -e

vous donne la liste des services en cours, dans l'ordre.

service -l

vous donne la liste des services, tous les services possibles.

service  phpcgi onestart

Cela vous évite de vous posez la question de savoir si le service est lancé sous /etc/rc.d/ ou /usr/local/etc/rc.d.
et puis c'est plus cours à écrire. :-)

Écrire un script

Placez un script dans /usr/local/etc/rc.d/. Le système parcours ce répertoire à la recherche d'un script à exécuter et ce, de deux manières:

Ancien modèle

Cette méthode a disparu depuis l'avènement de la branche V et et l'import de rcNG. Elle reste toutefois compatible avec la nouvelle méthode. Vos scripts doivent avoir avoir l'extension .sh et les crédits «755», soit «-rwxr-xr-x» et suivre la structure suivante:

 
#!/bin/sh
echo -n ' Mon Script à moi'
case "$1" in
start)
       /usr/local/bin/MonService
       ;;
stop)
       kill -9 `cat /var/run/MonService.pid`
       ;;
*)
       echo "Usage: `basename $0` {start|stop}" >&2
       exit 64
       ;;
esac
exit 0

La nouvelle méthode

Écrivez simplement un script de ce style:

 
#!/bin/sh
#
# PROVIDE: MonService
# REQUIRE: DAEMON
# BEFORE:  LOGIN
. /etc/rc.subr
name="MonService"
rcvar=`set_rcvar`
command="/usr/local/bin/MonService"
load_rc_config $name
run_rc_command "$1"

Ce script sera exécuté après daemon et avant login.

Le Monde

Le monde utilise ses propres scripts RC et les place dans /etc/rc.d.
Par exemple:

....Force le lancement du gestionnaire d'impression lpd
......Même si lpd_enable est affecté à FALSE
/etc/rc.d/lpd forcestart    
....Redémarre bind
/etc/rc.d/named restart

En savoir plus

Projets :