Aucun fichier ou répertoire de ce type /etc/init.d/functions

21

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/functionsdans 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/functionsfichier est-il différent pour différentes distributions Linux? Si oui, comment puis-je le trouver?

tecman
la source
Notez que cette erreur peut également être provoquée par des fins de ligne Windows.
Emerson Rocha

Réponses:

24

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.ddu tout, ou l'utilisent de manière incompatible (Slackware et Arch me viennent à l'esprit, il y en a d'autres).

geekosaure
la source
puis-je savoir quel est le fichier et où se trouve-t-il pour Redhat 5.5?
tecman
Aussi, comment puis-je trouver le nom et le chemin du fichier? existe-t-il un moyen de le faire ou est-ce que nous ne pouvons le trouver que dans la documentation?
tecman
Je l'ai fait en regardant, car j'ai les deux disponibles; Je n'ai pas d'installation Red Hat. Mais vous avez peut-être manqué l'importance de ce que j'ai dit en gras ci-dessus: les fonctions de votre /etc/init.d/functions n'existent pas sur d'autres distributions. Chaque distribution a ses propres règles /etc/init.det sa bibliothèque de fonctions (le cas échéant) est orientée autour de ces règles; par exemple, SuSE rc_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.
geekosaur
15

Dans l' image Docker de CentOS 7, je devais simplement installer le package initscriptspour que ce script soit installé:

yum install -y initscripts

(Merci à ce problème surdocker-library lequel je me suis penché sur ce commit )

Anthony O.
la source
Cela a résolu mon problème en utilisant Jenkins sur Fedora 24 dans un conteneur Docker. (juste utilisé dnfau lieu yumde bien sûr). Merci!
geerlingguy
Cela fonctionne également lors de l'installation de MarkLogic 9 dans un conteneur Docker Centos7. Les documents d'installation mentionnent uniquement la nécessité de lib.so.6 et lsb-core-amd64, mais je suppose qu'étant donné qu'ils parlent d'une installation sur une installation complète de CentOS 7, ils oublieraient que vous auriez besoin du package initscripts.
alc6379
12

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 le redhat-lsbpackage, qui est facultatif .

Donc, vous devez vraiment comprendre ce que vous visez. Pardon.

mattdm
la source
1

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.dscripts de démarrage basés sur une plate-forme indépendante , en utilisant les fonctions init définies par LSB comme indiqué ici

Toutes 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-paquet lsb-core-noarchqui 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 systemdest maintenant le gestionnaire de système et de service de facto pour la plupart des distributions, il est préférable d'écrire un systemd service unitau lieu d'écrire un initscript.

Samveen
la source
0

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 .

Marcus Downing
la source
0

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

RUN yum install -y initscripts
Thavaprakash Swaminathan
la source