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.
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.
Rendre le script exécutable:
Sudo chmod u+x myscript.sh
Copiez-le dans /etc/init.d
:
Sudo cp myscript /etc/init.d
Créez un lien symbolique dans rc2.d:
cd /etc/rc2.d
Sudo ln -s /etc/init.d/myscript.sh
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
.
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