web-dev-qa-db-fra.com

Comment puis-je faire démarrer un script dans /etc/init.d au démarrage?

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.

87
Naftuli Kay

Si vous utilisez un système basé sur Red Hat, comme vous l'avez mentionné, vous pouvez effectuer les opérations suivantes:

  1. Créez un script et placez-le dans /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

  1. Activer le script

    $ chkconfig --add myscript 
    $ chkconfig --level 2345 myscript on 
    
  2. 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
    
115
canen

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é

  • 1 utilisateur unique (super utilisateur)
  • 2 multi-utilisateurs
  • 3 multi-utilisateurs + réseau
  • 4 non utilisé/définissable par l'utilisateur
  • 5 utilisateurs multiples, réseau + X11

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/.

10
user unknown

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 ).

3
mdt