J'essaie actuellement de comprendre la différence entre init.d
et cron @reboot
pour l'exécution d'un script au démarrage / au démarrage du système.
L'utilisation de @reboot
(cette méthode a été mentionnée dans ce forum par hs.chandra ) est quelque chose de plus simple, en allant simplement dans crontab -e
et en créant un @reboot /some_directory/to_your/script/your_script.txt
et devant your_script.txt
être exécuté à chaque fois que le système est redémarré. Une explication détaillée de @reboot
est ici
Alternativement, en intégrant /etc/init.d/your_script.txt
dans la deuxième ligne de votre script, à savoir:
#!/bin/bash
# /etc/init.d/your_script.txt
Vous pouvez exécuter chmod +x /etc/init.d/your_script.txt
et cela devrait également avoir pour résultat your_script.txt
d'exécuter chaque fois que le système est démarré.
Q1: Quelles sont les principales différences entre les deux?
Q2: Lequel 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 lors du démarrage?
Je vais incorporer un fichier .sh bash à exécuter au démarrage.
Réponses:
init.d
, également connu sous le nom de script SysV, est destiné à démarrer et à arrêter des services lors de l'initialisation et de l'arrêt du système. (les/etc/init.d/
scripts sont également exécutés sur des systèmes compatibles avec systemd pour des raisons de compatibilité).start
etstop
et plus (voir politique Debian )crontab
(et donc@reboot
).@reboot
script (pas seulement root)multi-user.target
./etc/rc.local
est souvent considéré comme laid ou déprécié (du moins par redhat ), mais il présentait encore quelques fonctionnalités intéressantes:rc.local
était (presque) le dernier service à démarrer.rc.local
est exécuté aprèsnetwork.target
par défaut (pasnetwork-online.target
!)En ce qui concerne systemd
network.target
etnetwork-online.target
, lisez Running Services After the Network .la source
/var/run/crond.reboot
fichier à chaque fois. Si je le souhaite, des tâches cron @reboot sont exécutées à chaque démarrage du système. Si ce fichier existis @reboot les tâches cron ne seront pas exécutéesTout d'abord, une clarification s'impose:
httpd
oucron
Quant à savoir s’il vaut mieux utiliser
rc.local
oucron
exécuter votre script, je suppose que c’est davantage une question d’esthétique que de fonctionnalité.cron
, en tant que planificateur de tâches, est conçu comme une méthode permettant d’effectuer des opérations de maintenance ou d’entretien sur une machine, telles que 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 (telle que@reboot
).L’utilisation
rc.local
, par contre, relèverait davantage d’une tâche de configuration système, carrc.local
, exécutée par le système init de la machine, elle est généralement responsable de la configuration de la configuration réseau, des services ou des environnements de la machine (mais là encore, elle n’est pas limitée à cette tâche).Cependant, ces deux points devraient être tempérés par le fait que tous les systèmes init n'offrent pas de
rc.local
mécanisme et que tous les démons cron n'offrent@reboot
pas de balise psuedo.Points bonus
Comme indiqué précédemment,
init.d
le répertoire contient les scripts qui contrôlent les services pouvant être démarrés ou arrêtés sur votre système (au moins sur les ordinateurs utilisant unSysV
système de type init). En fonction de votre système init et de l'objectif de votre script, il peut être raisonnable de convertir votre script en script init pour qu'il soit exécuté de la même manière qu'un service. Ceci, cependant, dépend fortement de votre système init car le cadre entourant la manière dont ces fichiers sont construits peut être très différent.Dernier mot
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 que soit il a un shebang (#!/bin/bash
) en haut du fichier, ou est appelé en tant quebash /path/to/script.whatever
, cela ne devrait pas importer en termes d'exécution du script.la source
bash
les scripts ne se terminent généralement pas (et ne devraient sans doute pas l'être) par unesh
extension..sh
plutôt que.txt
"- la significationsh
est plus précise en tant qu'extension de nom de fichier pour les scripts bash (ou d'autres scripts shell) que celletxt
qui désigne généralement du texte brut. Vous pouvez utiliser n'importe quelle extension qui vous fait rire, mais la convention habituelle serait, si utiliser une extensionsh
serait plus approprié et couramment utilisé; bien que cela ne soit pas obligatoire, en particulier pour les scripts destinés à être exécutés à partir duPATH
.J'écris ma réponse ci-dessous;
Outre les différences mentionnées par d'autres utilisateurs ci-dessus, je voudrais souligner le fait que @reboot dépend du démon crond. Vous êtes dépendant de l'ordre dans lequel crond commence. Bien que la plupart des cas, crond commence bien, mais il peut ne pas réussir à démarrer (au moins, j'ai vu des échecs dans certains de mes projets). Lorsque vous écrivez un script init, un échec survient généralement si vous faites quelque chose de mal dans votre script (par exemple, en vous fiant à un service qui démarrera après votre service).
Basé sur ci-dessus, je pense que init est plus robuste. Mais il y a un autre point mentionné par "Franklin Piat" dans la première réponse. Habituellement, vous avez besoin du script init pour un démon et vous devez suivre la politique
Je ne le pense pas (rc.local est un peu vieux et obsolète)
Oui. Habituellement, les rédacteurs d’application / package le font de cette manière.
la source