J'essaie actuellement de comprendre la différence entre init.d
et cron @reboot
pour exécuter un script au démarrage/démarrage du système.
L'utilisation de @reboot
(cette méthode a été mentionnée dans ce forum par hs.chandra) est un peu plus simple, en allant simplement dans crontab -e
et en créant un @reboot /some_directory/to_your/script/your_script.txt
et alors your_script.txt
doit être exécuté à chaque redémarrage du système. Une explication approfondie de @reboot
est ici
Alternativement en intégrant /etc/init.d/your_script.txt
dans la deuxième ligne de votre script ie:
#!/bin/bash
# /etc/init.d/your_script.txt
Tu peux courir chmod +x /etc/init.d/your_script.txt
et cela devrait également résulter pour your_script.txt
pour s'exécuter à chaque démarrage du système.
Q1: Quelles sont les principales différences entre les deux?
Q2: Quel est le plus robuste?
Q3: Y a-t-il un meilleur des deux?
Q4: Est-ce la bonne façon d'incorporer un script à exécuter pendant le démarrage?
J'incorporerai un fichier bash .sh à exécuter lors du démarrage.
init.d
, également connu sous le nom de script SysV, est destiné à démarrer et arrêter les services pendant l'initialisation et l'arrêt du système. (Les scripts /etc/init.d/
Sont également exécutés sur des systèmes compatibles systemd pour des raisons de compatibilité).
start
et stop
et plus (voir Politique Debian )crontab
(et donc @reboot
).
@reboot
(pas seulement root)multi-user.target
./etc/rc.local
est souvent considéré comme moche ou obsolète (au moins par redhat ), mais il en avait encore Belles fonctionnalités:
rc.local
était (presque) le dernier service à démarrer.rc.local
est exécuté après network.target
par défaut (pas network-online.target
!)En ce qui concerne network.target
Et network-online.target
De systemd, lisez Exécution des services une fois le réseau activé .
Tout d'abord, une clarification s'impose:
httpd
ou cron
Pour savoir s'il vaut mieux utiliser rc.local
ou cron
pour exécuter votre script, je soupçonne que c'est plus une question d'esthétique que de praticité. cron
, en tant que planificateur de tâches, est conçu comme une méthode pour effectuer la maintenance ou l'entretien d'une machine, comme la vérification des mises à jour, le nettoyage des caches ou la réalisation d'audits de sécurité. Cela ne signifie pas qu'il est limité à l'exécution de ces fonctions, car il peut exécuter n'importe quel script ou commande souhaité à l'heure spécifiée (comme @reboot
).
En utilisant rc.local
, d'autre part, relèverait davantage d'un type de tâche de configuration système, comme rc.local
, exécuté par le système d'initialisation des machines, est généralement responsable de la définition de la configuration réseau, des services ou des environnements des machines (mais là encore, il ne se limite pas à cette tâche).
Cependant, ces deux points doivent être tempérés par le fait que tous les systèmes init n'offrent pas un rc.local
mécanisme, et tous les démons cron n'offrent pas un @reboot
balise psuedo.
Comme mentionné, init.d
est le répertoire qui contient les scripts qui contrôlent les services qui peuvent être démarrés ou arrêtés sur votre système (au moins sur les machines qui utilisent un système init de type SysV
). En fonction de votre système d'initialisation et de l'objectif de votre script, il peut être raisonnable de convertir votre script en script d'initialisation à exécuter de la même manière que un service. Cependant, cela dépend fortement de votre système d'initialisation car le cadre entourant la façon dont ces fichiers sont construits peut différer considérablement.
Il convient également de noter que les scripts bash se terminent généralement par un suffixe .sh
plutôt que .txt
, car cela indique immédiatement que le fichier est un script Shell au lieu d'un fichier texte. Cela étant dit, à condition qu'il ait soit un Shebang (#!/bin/bash
) en haut du fichier, ou s'appelle bash /path/to/script.whatever
, peu importe l'exécution du script.
J'écris ma réponse ci-dessous;
Q1: Quelles sont les principales différences entre les deux?
Outre les différences mentionnées par les autres utilisateurs ci-dessus, je voudrais souligner le fait que @reboot dépend du démon crond. Vous dépendez de l'ordre de démarrage de crond. Bien que la plupart des cas, crond démarre bien mais il peut échouer à certains moments (au moins j'ai vu des échecs dans certains de mes projets). Lorsque vous écrivez un script d'initialisation, un échec se produit généralement si vous faites quelque chose de mal dans votre script (un ex: en s'appuyant sur un service qui démarrera après votre service)
Q2: Quel est le plus robuste?
Sur la base de ce qui précède, je pense que l'init est plus robuste. Mais il y a un autre point tel que mentionné par "Franklin Piat" dans la première réponse. Habituellement, vous avez besoin d'un script init pour un démon et vous devez suivre la politique
Q3: Y en a-t-il un meilleur des deux?
Je ne pense pas (rc.local est un peu vieux et obsolète)
Q4: Est-ce la bonne façon d'incorporer un script à exécuter pendant le démarrage?
Oui. Habituellement, les rédacteurs d'applications/de packages le font de cette façon.