Il existe deux méthodes pour une commande simple.
Par exemple vous voulez synchroniser l’heure et la date du système au démarrage.
La commande est ntpdate le_serveur_de_temps
ou encore /usr/sbin/ntpdate le_serveur_de_temps
si le PATH n’est pas réglé
1) méthode simple :
ajouter la ligne /usr/sbin/ntpdate le_serveur_de_temps
à la fin du fichier /etc/rc.d/rc.local
2) méthode plus complexe respectant le standard system V :
Créer un script dans le répertoire /etc/init.d
Pour faire simple, reprenons un script existant dans le répertoire, par exemple reboot
# ! /bin/sh ### BEGIN INIT INFO # Provides : reboot # Required-Start : # Required-Stop : # Should-Start : # Default-Start : # Default-Stop : 6 # Short-Description : Execute the reboot command. # Description : ### END INIT INFOPATH=/sbin :/usr/sbin :/bin :/usr/bin
. /lib/lsb/init-functions
do_stop () # Message should end with a newline since kFreeBSD may # print more stuff (see #323749) log_action_msg "Will now restart" reboot -d -f -i
case "$1" in start) # No-op ;; restart|reload|force-reload) echo "Error : argument ’$1’ not supported" >&2 exit 3 ;; stop) do_stop ;; *) echo "Usage : $0 start|stop" >&2 exit 3 ;; esac
On le copie
cp /etc/init.d/reboot /etc/init.d/monscript
On adapte le script
### BEGIN INIT INFO # Provides : reboot # Required-Start : # Required-Stop : # Should-Start : # Default-Start : # Default-Stop : 6 # Short-Description : Execute the reboot command. # Description : ### END INIT INFOPATH=/sbin :/usr/sbin :/bin :/usr/bin
. /lib/lsb/init-functions
do_start () # Message should end with a newline since kFreeBSD may # print more stuff (see #323749) log_action_msg "NTP - Mise à jour de l’heure de la machine" ntpdate le_serveur_de_temps
case "$1" in start) # op do_start ;; restart|reload|force-reload) echo "Error : argument ’$1’ not supported" >&2 exit 3 ;; stop) # no op ;; *) echo "Usage : $0 start|stop" >&2 exit 3 ;; esac
On vérifie que le fichier monscript
à les mêmes droits que les autres :
chmod 755 /etc/init.d/monscript
On teste que le script fonctionne bien :
/etc/init.d/monscript start
Il reste maintenant à le l’exécuter à chaque démarrage de la machine.
On choisi un niveau d’exécution dans lequel on va l’utiliser.
En règle générale soit : level 3 (mode texte) soit level 5 (mode graphique).
On choisit le run level 3.
Il faut faire un lien vers le script en question en prefixant par S+numerod’ordre dans /etc/rc.d/rc3.d
Le préfixe S comme Start et le numéro pour choisir l’ordre d’exécution par rapport aux autres scripts.
(il va de soi que si la commande placée dans le script monscript
se sert du service réseau, celui-ci doit être lancé après que le réseau soit actif)
ln -s /etc/init.d/monscript /etc/rc3.d/S98monscript
Autres pistes :
- Si vous voulez que votre script se lance à l’arrêt de la machine il faut faire un lien en prefixant par un K (comme Kill) dans rc0.d et rc6.d
- Sur une Debian, pour faire un script complexe il existe un gabarit : le fichier
skeleton
présent dans le répertoire/etc/init.d
Commentaires
Ajouter un service au démarrage
Bonsoir Gérald,
Je vais faire le rabat-joie et je m’en excuse par avance ! mais d’abord merci de ce tuto au titre alléchant. Ce genre de choses m’intéressent car je ne les connais pas.
La présentation est par contre déconcertante, voir repoussante. Je n’ai pas su si je pouvais le faire sous Debian ou non, ou une autre version. C’est pas mal de dire sous quelle version t’a fait les tests. J’ai fais un aperçu du tuto, on ne sait plus ce qui est du code ou ne l’est pas. C’est un peu dommage qu’un tuto qui va plaire (déjà à moi) par le contenu déplaise par la mise en forme et le manque de "chair" autour du "squelette". Par exemple, tu évoques init.d qui doit être un fichier qui initialise comme son nom l’indique mais tu ne le présentes pas.
Bon, j’arrête de faire mon rabat-joie ! Sinon, j’attends le tuto car ça va me pousser à mieux connaitre ma Debian et ça c’est très bien.
Bonne soirée. Claude.