web-dev-qa-db-fra.com

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

le titre résume presque beaucoup.

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

12
Amir Arad

Vous pouvez appeler votre script de / etc/rc.local, avant la ligne qui indique Quitter 0

En ce qui concerne la fermeture de votre application, je suggérerais de mettre un script dans / etc/rc0.d. Vous devez le nommer avec une majuscule [~ # ~ # ~] k [~ # ~ ~], puis un numéro de 2 chiffres qui spécifie la commande que ces scripts sont exécutés, puis un nom. Il sera appelé avec un paramètre "STOP", mais vous pouvez l'ignorer pour un script d'arrêt simple.

4
Brent

Pour le démarrage, regardez ceci .

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 que vous souhaitez exécuter à. 0 est la ferme d'arrêt pour Debian je crois.

3
squillman

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

Vérifiez-le vous-même. Courir: ls -l /sbin/init Et voir ce que ça pointe. Ces jours-ci, il pointe de systemd (/sbin/init -> /lib/systemd/systemd), un programme d'initialisation plus récent et meilleur.


Donc, les réponses choisies et autres ici sont maintenant obsolètes !!!


* Pendant que vous pouvez toujours installer des scripts l'ancienne façon avec les outils System-V, ce n'est pas une bonne idée de manière générale.

man systemd.service dit:*

Si un service est demandé sous un certain nom mais aucun fichier de configuration de l'unité n'est trouvé, SystemD recherche un script SYSV init 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 (I.e. Jessie, Stretch, Buster, etc ...)

C'est plus facile que vous ne le pensez. (-:

Voici la méthode nouvelle et préférée pour installer des programmes de démarrage ou d'arrêt.

Avec systemd vous souhaitez d'abord créer un fichier unitaire. Un fichier unitaire est principalement des déclarations, pas de code.

Ensuite, vous utiliserez la commande systemctl commande à Activer ou Démarrer cette unité.

systemd fait une grande partie du travail pour vous, ce qui facilite la tâche, par exemple, d'avoir un programme critique redémarrer automatiquement s'il se bloque ou est autrement tué. En outre, il arrête votre programme où et quand il devrait par défaut sans travail supplémentaire de votre part.


Commencez à en savoir plus sur systemd ici:

debian et ailleurs et etc et etc .


Pages de l'homme pour commencer:

man systemd.unit - À propos des fichiers unitaires en général
[.____] man systemd.service - À propos des fichiers de l'unité de service, par exemple Daemons et programmes d'exécution unique.

man systemctl - Interface utilisateur de ligne de commande
[.____] man journalctl - voir le journal de ce que SystemD a fait

man systemd - À propos du programme init lui-même


Il existe également une variété d'autres types de fichiers unitaires, par ex.

man systemd.target - Pour les groupes et les cibles courantes synchronisées.

Une fois que vous avez digéré les bases ci-dessus, puis creuser avec man -k systemd Pour trouver d'autres pages d'homme associées.



Quoi que vous fassiez, sur Debian N'utilisez aucun de ces:

  • update-rc.d --install et supprimer des liens de script init de style System-V Style
  • sysv-rc-conf - Configuration du niveau d'exécution pour SYSV comme des liens de script init
  • runlevel - Impression de sysv runlevel précédent et actuel
  • BUM - B oot U p M Anager - Un éditeur de runlevel graphique
  • systemadm - Frontend graphique pour le système SystemD System et Service Manager
    [.____] (BTW, l'auteur m'a dit par courrier électronique qu'il est trop brisé maintenant.)


UN EXEMPLE:

Ce fichier d'unité démarre le démon Noir.com lorsque je démarre et la ferme vers le bas lorsque je fermeture.

Ce démon, de temps à autre, envoie mon adresse IP actuelle pour mettre à jour mes DDNS ([~ # ~] d [~ # ~ ~] Ynamic [[~ # ~] DNS [~ # ~]] ([~ # ~] d [~ # ~ ~] OMAIN [~ # ~] n [~ # ~]] AME - S erver)) la base de données du fournisseur, gardant ainsi mon nom de domaine pointant sur mon ordinateur partout où il se déroule.

Cet appareil est situé sur mon système dans ce fichier de paramètres: /etc/systemd/system/noip2.service

Voici ce qui est dans le fichier de l'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

Run manuellement ​​Un fichier unitaire, (par exemple pour tester):

  • Démarrer avec $ Sudo systemctl start noip2.
  • Redémarrer avec $ Sudo systemctl restart noip2.
  • STOP avec $ Sudo systemctl stop noip2.

Configurer le système Pour exécuter automatiquement un fichier de l'unité lors du démarrage ou de la fermeture:

  • Commencez à utiliser avec $ Sudo systemctl enable noip2.
  • fin en utilisant ​​avec $ Sudo systemctl disable noip2.

Voir le journal

  • $ Sudo journalctl -u noip2
1
Elliptical view

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

  • startup, modifier /etc/init.d/rc.local, ajoutez votre SH à la fin du fichier, avant: (il l'exécutera juste avant la connexion "écran")
  • arrêt, modifier /etc/init.d/halt, ajoutez 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, appelée par ce fichier de script.
  • redémarrez, comme l'arrêt, mais en /etc/init.d/reboot
1
chickensk