web-dev-qa-db-fra.com

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

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

À l'heure actuelle, je ne sais pas quel linux distributez mon client utilise. Est le init.d/functions fichier différent pour différentes distributions de Linux? Si oui, comment puis-je le trouver?

22
tecman

Il est spécifique à toute la distribution que vous utilisez. Debian et Ubuntu ont /lib/lsb/init-functions; SUSE a /etc/rc.status; Aucun d'entre eux n'est compatible avec les autres. En fait, certaines distributions n'utilisent pas /etc/init.d du tout, ou utilisez-la de manière incompatible (slackware et arche se produisent sur moi du haut de ma tête; il y en a d'autres).

24
geekosaur

Dans Centos 7 Docker Image J'ai dû simplement installer le package initscripts afin que ce script soit installé:

yum install -y initscripts

(Merci à ce problème sur docker-library qui m'a fait regarder ce commit )

16
Anthony O.

C'est absolument dépendant de la distribution. Vous allez vraiment avoir besoin de découvrir la distribution afin d'écrire un script init correspondant correctement.

Vous pouvez également suivre la spécification de LSB (Linux Standard Base) et espérons que la distribution en question a également fait. La spécification actuelle dicte que les fonctions de script Init standard seront disponibles en tant que /lib/lsb/init-functions ( voir docs ici ). Sur Fedora et d'autres distros liés au chapeau rouge, cela est fourni par le redhat-lsb Paquet, qui est en option .

Donc, vous devez vraiment comprendre ce que vous ciblez. Désolé.

12
mattdm

Ajouter une réponse récente

Comme indiqué dans une autre réponse, les spécifications Standard Base Linux (LSB) fournissent un moyen de rédiger une plate-forme indépendante init.d scripts de démarrage basés sur les fonctions initiales définies par LSB définies comme indiqué sur la liste ici

Toutes les distributions conformes à LSB (tous les gros) fournissent le fichier /lib/lsb/init-functions (qui définit les fonctions énumérées) dans le méta-package lsb-core-noarch qui peut être installé à l'aide du gestionnaire de packages de la distribution $PKGMAN $INSTOPT lsb-core-noarch (yum, dnf, apt, ...).

Un exemple d'un tel script init est Ceci .

Cependant, étant donné comment systemd est maintenant le système de gestion de la plupart des distributions, il est préférable d'écrire un systemd service unit Au lieu d'écrire un initscript.

1
Samveen

J'ai raté ces fonctions lorsque j'ai déménagé à Ubuntu, j'ai donc créé une bibliothèque qui recrée leurs fonctionnalités: efunctions .

0
Marcus Downing

J'ai aussi eu la même erreur lorsque j'exécute mon conteneur Docker. Il a été corrigé en ajoutant la ligne ci-dessous dans mon Dockerfile

RUN yum install -y initscripts