Je pense que j'ai lu quelque chose à ce sujet il y a quelque temps, mais je ne me souviens pas comment cela s'est fait. Essentiellement, j'ai un service dans /etc/init.d
que j'aimerais démarrer automatiquement au démarrage. Je me souviens que cela a quelque chose à voir avec la liaison symbolique du script dans le /etc/rc.d
répertoire, mais je ne me souviens pas pour le moment. Quelle est la commande pour cela?
Je crois que je suis sur un dérivé Fedora/CentOS.
Si vous utilisez un système basé sur Red Hat, comme vous l'avez mentionné, vous pouvez effectuer les opérations suivantes:
/etc/init.d
(par exemple /etc/init.d/myscript
). Le script doit avoir le format suivant:#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....
# Source function library.
. /etc/init.d/functions
start() {
# code to start app comes here
# example: daemon program_name &
}
stop() {
# code to stop app comes here
# example: killproc program_name
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
# code to check status of app comes here
# example: status program_name
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
exit 0
Le format est assez standard et vous pouvez afficher les scripts existants dans /etc/init.d
. Vous pouvez ensuite utiliser le script comme ceci /etc/init.d/myscript start
ou chkconfig myscript start
. La page de manuel ckconfig
explique l'en-tête du script:
> This says that the script should be started in levels 2, 3, 4, and
> 5, that its start priority should be 20, and that its stop priority
> should be 80.
L'exemple de code de démarrage, d'arrêt et d'état utilise des fonctions d'assistance définies dans /etc/init.d/functions
Activer le script
$ chkconfig --add myscript
$ chkconfig --level 2345 myscript on
Vérifiez que le script est bien activé - vous devriez voir "on" pour les niveaux que vous avez sélectionnés.
$ chkconfig --list | grep myscript
Vous testez dans quel niveau d'exécution votre machine commence normalement.
runlevel
Il s'agit souvent de 5 ou 2 - il existe différentes conventions, mais rien de vraiment établi, afaik. Ubuntu utilise 2, alors que l'ancienne distribution que j'utilisais a toujours utilisé
Ensuite, vous créez un lien symbolique à partir de votre script init, peut-être /etc/init.d/foobar
à /etc/rc2.d/SXYfoobar
S signifie 'Démarrer ce script dans ce niveau d'exécution (ici: 2). XY est un nombre décimal à deux chiffres, qui est pertinent pour la séquence, les scripts sont démarrés.
Si vous dépendez du script S45barfoo à exécuter avant vous et que S55foofoo dépend de votre script, vous choisirez xy entre 45 et 55. Pour des nombres égaux, l'ordre de démarrage n'est pas défini.
Pendant ce temps, Ubuntu est passé (passe) à une autre procédure de démarrage, appelée upstart
.
Et notez: les liens ne pointent pas toujours vers /etc/rcX.d
- Des fois ça l'est /etc/init/rcX.d
ou quelque chose de similaire, mais il devrait être facile à trouver, quelque part en dessous de/etc.
Si vous souhaitez démarrer quelque chose à la fin des scripts de démarrage, /etc/rc.local
serait un fichier à rechercher, mais si cela dépend de X11 déjà en cours d'exécution, vous pouvez rechercher une option de démarrage automatique de votre environnement de bureau, ou /etc/X11/Xsession.d/
avec un schéma similaire à celui décrit ci-dessus.
Si vous dépendez de la mise en place du réseau, il existe un répertoire distinct (if-up.d) et pour les périphériques montés comme les lecteurs USB externes /etc/udev/rules.d/
.
Comme Naftuli Tzvi Kay l'a demandé au sujet de Debian ci-dessus: à partir de Debian 6, votre script devrait contenir un en-tête LSB (Linux Standards Base) qui indique ses dépendances et capacités ( voir la page wiki Debian ).
Si un en-tête LSB est présent, vous pouvez utiliser insserv
pour inclure votre script dans le processus de démarrage ( voir une autre page wiki Debian ).