J'ai créé un script de démarrage pour démarrer / redémarrer / arrêter un groupe d'applications. J'ai utilisé la lib /etc/init.d/functions
dans mon script. Cela fonctionne bien sur mon système, mais cela ne fonctionne pas pour mon client; il obtient l'erreur:
Aucun fichier ou répertoire de ce type /etc/init.d/functions
Pour le moment, je ne sais pas quelle distribution Linux mon client utilise. Le init.d/functions
fichier est-il différent pour différentes distributions Linux? Si oui, comment puis-je le trouver?
init-script
tecman
la source
la source
Réponses:
Elle est spécifique à la distribution que vous exécutez. Debian et Ubuntu ont
/lib/lsb/init-functions
; SuSE a/etc/rc.status
; aucun d'eux n'est compatible avec les autres. En fait, certaines distributions n'utilisent pas/etc/init.d
du tout, ou l'utilisent de manière incompatible (Slackware et Arch me viennent à l'esprit, il y en a d'autres).la source
/etc/init.d/functions
n'existent pas sur d'autres distributions. Chaque distribution a ses propres règles/etc/init.d
et sa bibliothèque de fonctions (le cas échéant) est orientée autour de ces règles; par exemple, SuSErc_status -s
. Il existe certaines fonctions "standard" LSB, qui sont censées se trouver dans/lib/lsb/init-functions
, mais votre client peut ne pas exécuter une distribution qui a été mise à jour pour la fournir.Dans l' image Docker de CentOS 7, je devais simplement installer le package
initscripts
pour que ce script soit installé:(Merci à ce problème sur
docker-library
lequel je me suis penché sur ce commit )la source
dnf
au lieuyum
de bien sûr). Merci!Cela dépend absolument de la distribution. Vous allez vraiment avoir besoin de découvrir la distribution afin d'écrire un script d'initialisation correspondant correctement.
Vous pouvez également suivre la spécification LSB (Linux Standard Base) et espérer que la distribution en question a également fait. La spécification actuelle impose que les fonctions de script init standard soient disponibles en tant que
/lib/lsb/init-functions
( voir la documentation ici ). Sur Fedora et autres distributions liées à Red Hat, cela est fourni par leredhat-lsb
package, qui est facultatif .Donc, vous devez vraiment comprendre ce que vous visez. Pardon.
la source
Ajout d'une réponse récente
Comme indiqué dans une autre réponse, les spécifications Linux Standard Base (LSB) fournissent un moyen d'écrire des
init.d
scripts de démarrage basés sur une plate-forme indépendante , en utilisant les fonctions init définies par LSB comme indiqué iciToutes les distributions conformes (LSB tous les grands ones) fournissent le fichier
/lib/lsb/init-functions
(qui définit les fonctions énumérées) dans la méta-paquetlsb-core-noarch
qui peut être installé en utilisant le gestionnaire de paquets de la distribution$PKGMAN $INSTOPT lsb-core-noarch
(yum
,dnf
,apt
, ...).Un exemple d'un tel script d'initialisation est ce .
Cependant, étant donné comment
systemd
est maintenant le gestionnaire de système et de service de facto pour la plupart des distributions, il est préférable d'écrire unsystemd service unit
au lieu d'écrire uninitscript
.la source
J'ai raté ces fonctions lorsque je suis passé à Ubuntu, j'ai donc créé une bibliothèque qui recrée leurs fonctionnalités: les fonctions électroniques .
la source
Moi aussi, j'ai eu la même erreur lors de l'exécution de mon conteneur Docker. Il a été corrigé en ajoutant la ligne ci-dessous dans mon Dockerfile
la source