Comment ajouter un script au démarrage et à l'arrêt dans Debian?

12

le titre résume assez bien.

comment ajouter un startup.sh et shutdown.sh de mon application serveur à la séquence de démarrage et d'arrêt du système d'exploitation Debian?

Amir Arad
la source

Réponses:

15

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/skeletonque 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-confou au ksysvpackage.

MikeyB
la source
4

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.

Brent
la source
Pourquoi voudriez-vous farfouiller avec rc.local alors que vous devez déjà jouer avec /etc/rcX.d de toute façon?
womble
rc.local est le bon endroit pour les choses simples de démarrage - pas besoin de traiter les paramètres de démarrage / arrêt, etc. Mais il n'a pas la capacité d'arrêter un processus. Le truc rc0.d est un peu un hack.
Brent
3

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.

squillman
la source
Voici les informations d'arrêt dont j'avais besoin. Merci pour cela, @squillman.
harperville
1

Le plus simple est de modifier les scripts existants, fonctionne dans mon système, utilisé pour les sons :)

  • démarrage, modification /etc/init.d/rc.local, ajout de votre sh à la fin du fichier, avant: (il l'exécutera juste avant la "screen" de connexion)
  • arrêter, modifier /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
  • redémarrage, identique à l'arrêt, mais /etc/init.d/reboot
chickensk
la source
1

Depuis Debian Jessie, l'ancien initprogramme a été remplacé par systemd!

Vérifiez-le vous-même. Exécutez: ls -l /sbin/initet 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%.


Pour les nouveaux systèmes Debian (ie Jessie, Stretch, Buster, etc ...)

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 systemdvous 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 systemctlcommande pour activer ou démarrer cette unité.

systemdfait 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 systemdici:

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 systemdpour 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-V
  • sysv-rc-conf - Configuration au niveau de l'exécution pour SysV comme les liens de script init
  • runlevel - Imprimer le niveau d'exécution SysV précédent et actuel
  • BUM- B oot U p M anager - un éditeur graphique de niveau d'exécution
  • systemadm- Frontend graphique pour le système systemd et le gestionnaire de services
    (BTW, l'auteur m'a dit par email qu'il était trop cassé maintenant.)


UN EXEMPLE:

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

  • commencer par $ sudo systemctl start noip2.
  • redémarrer avec $ sudo systemctl restart noip2.
  • arrêter avec $ 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:

  • commencer à utiliser avec $ sudo systemctl enable noip2.
  • fin d'utiliser avec $ sudo systemctl disable noip2.

Afficher le journal

  • $ sudo journalctl -u noip2
Vue elliptique
la source