web-dev-qa-db-fra.com

Comment écrire un script d'initialisation qui exécutera un script de démarrage existant?

J'essaie de comprendre le processus init.

J'ai un script qui lance 3 processus en arrière-plan (2 scripts Shell et une application Java.). Cela fonctionne très bien à partir de la ligne de commande.

J'aimerais exécuter ce script au démarrage.

/etc/init.d/skeleton n'avait pas de sens pour moi, car il ne semblait y avoir qu'un seul processus. Et la plupart des scripts d'initialisation semblent si complexes que je me perds un peu.

Tout ce que je veux vraiment faire est:

#!/bin/bash
/opt/myapp/bin/my_start_script

Si cela se produisait au démarrage, je serais très heureux.

2
David Parks

Vous pouvez ajouter votre lien à l'application Applications de démarrage dans Ubuntu si vous souhaitez utiliser l'interface graphique. L'inconvénient est qu'il ne s'exécutera que lorsque vous vous connecterez à l'interface graphique (c'est-à-dire pas pour les autres utilisateurs, et pas si vous ne vous connectez pas à l'environnement Ubuntu Desktop).

A l'aide de la ligne de commande, vous pouvez provoquer l'exécution d'un script avant le chargement du bureau Ubuntu.

Pour ce faire, exécutez votre script, copiez-le dans /etc/init.d et créez un lien symbolique vers le script dans /etc/rc2.d si vous souhaitez qu'il soit exécuté dans le niveau d'exécution multi-utilisateur par défaut (niveau d'exécution 2). Vous devriez le renommer avec un S suivi de l'ordre dans lequel vous voulez qu'il soit exécuté, respectif aux autres liens qu'il contient.

  1. Rendre le script exécutable:

    Sudo chmod u+x myscript.sh

  2. Copiez-le dans /etc/init.d:

    Sudo cp myscript /etc/init.d

  3. Créez un lien symbolique dans rc2.d:

    cd /etc/rc2.d

    Sudo ln -s /etc/init.d/myscript.sh

  4. Renommez-le selon le schéma de nommage:

    Sudo mv myscript.sh S70myscript.sh

Pour plus d'informations, voir les fichiers README dans /etc/init.d et /etc/rc2.d.

3
Omegamormegil

Utilisez Upstart car les scripts System V Init sont obsolètes et plus simples.

Il suffit de placer ce fichier my_script.conf dans /etc/init

# Start when pc starts up
start on runlevel [2345]
# Stop when pc shuts down 
stop on runlevel [016]

# Start Script 
exec my_start_script
# Stop Script 
pre-stop my_stop_script

Le script pre-stop contiendra du code pour tuer votre processus 3 et est facultatif. Lorsque le service est arrêté, sigterm sera envoyé au processus my_start_script mais, selon votre script, il sera peut-être déjà terminé.

Vous pouvez tester votre nouveau service en exécutant Sudo service my_script start et Sudo service my_script stop

4
Ciaran Liedeman