Réponses:
Sur Debian, les scripts de démarrage et d'arrêt des services et des applications doivent être placés dans /etc/init.d/
.
Debian fournit un exemple de script /etc/init.d/skeleton
que vous pouvez modifier à votre goût pour votre application particulière.
Une fois en place, appelez:
# update-rc.d YOURAPP defaults
Pour que Debian ajoute les /etc/rc?.d/
liens symboliques pour vous.
Si vous préférez un menu ou une interface graphique, jetez un œil au sysv-rc-conf
ou au ksysv
package.
Vous pouvez appeler votre script depuis /etc/rc.local , avant la ligne qui dit exit 0
En ce qui concerne la fermeture de votre application, je suggère de mettre un script dans /etc/rc0.d . Vous devez le nommer avec un K majuscule , puis un nombre à 2 chiffres qui spécifie l'ordre d'exécution de ces scripts, puis un nom. Il sera appelé avec un paramètre "stop", mais vous pouvez l'ignorer pour un simple script stop.
Pour le démarrage, jetez un œil à cela .
Pour l'arrêt, créez un lien / copiez votre script dans l'un des dossiers /etc/rcX.d où X est le niveau d'exécution sur lequel vous souhaitez qu'il s'exécute. 0 est le niveau d'exécution d'arrêt pour Debian je crois.
Le plus simple est de modifier les scripts existants, fonctionne dans mon système, utilisé pour les sons :)
/etc/init.d/rc.local
, ajout de votre sh à la fin du fichier, avant: (il l'exécutera juste avant la "screen" de connexion)/etc/init.d/halt
, ajouter votre sh au début du fichier, juste après les commentaires initiaux (il sera exécuté avant la commande d'arrêt réelle, qui est appelée par ce fichier de script/etc/init.d/reboot
Depuis Debian Jessie, l'ancien init
programme a été remplacé par systemd
!
Vérifiez-le vous-même. Exécutez: ls -l /sbin/init
et voyez ce qu'il pointe. De nos jours, il pointe vers systemd
( /sbin/init -> /lib/systemd/systemd
), un programme d'initialisation plus récent et meilleur.
AINSI LES RÉPONSES CHOISIES ET AUTRES ICI SONT MAINTENANT MISES À JOUR !!!
* Bien que vous puissiez toujours installer des scripts à l'ancienne avec les outils System-V, ce n'est généralement pas une bonne idée.
man systemd.service
dit:*
Si un service est demandé sous un certain nom mais qu'aucun fichier de configuration d'unité n'est trouvé, systemd recherche un script d'initialisation SysV du même nom ... et crée dynamiquement une unité de service à partir de ce script. Ceci est utile pour la compatibilité avec SysV. Notez que cette compatibilité est assez complète mais pas à 100%.
C'est plus facile que vous ne le pensez. (-:
Voici la nouvelle méthode préférée pour installer des programmes de démarrage ou d'arrêt.
Avec systemd
vous voulez d'abord créer un fichier d'unité . Un fichier d'unité est principalement des déclarations, pas du code.
Ensuite, vous utiliserez la systemctl
commande pour activer ou démarrer cette unité.
systemd
fait une grande partie du travail pour vous, ce qui facilite, par exemple, le redémarrage automatique d'un programme critique s'il se bloque ou est autrement tué. Il arrête également votre programme où et quand il devrait par défaut sans aucun travail supplémentaire de votre part.
Commencez à en savoir plus systemd
ici:
De Debian et ailleurs et etc et etc .
Pages de manuel pour commencer:
man systemd.unit
- À propos des fichiers d'unité en général
man systemd.service
- À propos des fichiers d'unité de service, par exemple les démons et les programmes à exécution unique.
man systemctl
- Interface utilisateur en ligne de commande
man journalctl
- Afficher le journal de ce que systemd a fait
man systemd
- À propos du programme init lui-même
Il existe également divers autres types de fichiers unitaires, par exemple
man systemd.target
- pour les groupes et les cibles synchronisées communes.
Une fois que vous avez digéré les bases ci-dessus, puis explorez avec man -k systemd
pour trouver d'autres pages de manuel connexes.
Quoi que vous fassiez, sur Debian, n'utilisez aucun de ces outils :
update-rc.d
--installer et supprimer les liens de script d'initialisation de style System-Vsysv-rc-conf
- Configuration au niveau de l'exécution pour SysV comme les liens de script initrunlevel
- Imprimer le niveau d'exécution SysV précédent et actuelBUM
- B oot U p M anager - un éditeur graphique de niveau d'exécutionsystemadm
- Frontend graphique pour le système systemd et le gestionnaire de services Ce fichier d'unité démarre le démon NoIP.com lorsque je démarre et l'arrête lorsque je ferme.
Ce démon, de temps en temps, envoie mon adresse IP actuelle de mettre à jour mon DDNS ( D ynamic DNS ( D OMAINE N amme S erver)) base de données du fournisseur, gardant ainsi mon nom de domaine pointant sur mon ordinateur partout où il se rend à.
Les fichiers de cet appareil se trouvent sur mon système dans ce fichier de paramètres: /etc/systemd/system/noip2.service
Voici le contenu du fichier d'unité:
# Comments can only go at the beginning of the line!
[Unit]
Description=Start the NoIP IP update daemon. This runs every 30 minutes and reports our current IP to NoIP.com to update Love2d.ddns.net.
Documentation=https://no-ip.com/
Documentation=file:///nobak/Installers/NoIP/noip-2.1.9-1/README.FIRST
[Service]
# 'forking' because process returns after starting daemon (traditional unix daemon).
Type=forking
# This program runs and returns, leaving the running daemon
ExecStart=/usr/local/bin/noip2
# Be in no hurry to start this. Max nice is +19.
Nice=15
# If it dies for any reason, then restart it
Restart=always
[Install]
# Installs a hook to use this unit file when the system boots or shuts down
WantedBy=multi-user.target
Exécutez manuellement un fichier d'unité (par exemple pour les tests):
$ sudo systemctl start noip2
. $ sudo systemctl restart noip2
. $ sudo systemctl stop noip2
. Configurez le système pour exécuter automatiquement un fichier d'unité lors du démarrage ou de l'arrêt:
$ sudo systemctl enable noip2
. $ sudo systemctl disable noip2
.Afficher le journal
$ sudo journalctl -u noip2