Keine solche Datei oder Verzeichnis /etc/init.d/functions

21

Ich habe ein Startskript erstellt, um eine Gruppe von Anwendungen zu starten / neu zu starten / zu stoppen. Ich habe die lib /etc/init.d/functionsin meinem Skript verwendet. Auf meinem System funktioniert es gut, aber auf meinem Client funktioniert es nicht. er bekommt den Fehler:

Keine solche Datei oder Verzeichnis /etc/init.d/functions

Im Moment weiß ich nicht, welche Linux-Distribution mein Client verwendet. Ist die init.d/functionsDatei für verschiedene Linux-Distributionen unterschiedlich? Wenn ja, wie kann ich es finden?

tecman
quelle
Beachten Sie, dass dieser Fehler auch durch Windows-Zeilenenden verursacht werden kann.
Emerson Rocha

Antworten:

24

Es ist spezifisch für jede Distribution, die Sie ausführen. Debian und Ubuntu haben /lib/lsb/init-functions; SuSE hat /etc/rc.status; Keiner von ihnen ist mit den anderen kompatibel. In der Tat verwenden einige Distributionen überhaupt nicht /etc/init.doder inkompatibel (Slackware und Arch sind mir auf den ersten Blick aufgefallen; es gibt andere).

Geekosaurier
quelle
kann ich wissen, welche Datei die Datei ist und wo sie sich für Redhat 5.5 befindet?
Tecman
Wie kann ich den Dateinamen und den Pfad finden? gibt es eine möglichkeit das zu tun oder können wir es nur aus der dokumentation entnehmen?
Tecman
Ich habe es getan, indem ich geschaut habe, wie ich beide zur Verfügung habe; Ich habe keine Red Hat-Installation. Aber Sie haben vielleicht die Wichtigkeit dessen, was ich oben in Fettdruck gesagt habe, übersehen: Die Funktionen in Ihrem /etc/init.d/functions existieren in anderen Distributionen nicht. Jede Distribution hat ihre eigenen Regeln für /etc/init.dund ihre Funktionsbibliothek (falls vorhanden) orientiert sich an diesen Regeln. Zum Beispiel SuSE's rc_status -s. Es gibt einige LSB- "Standard" -Funktionen, die enthalten sein sollen /lib/lsb/init-functions, aber Ihr Client führt möglicherweise keine Distribution aus, die aktualisiert wurde, um sie bereitzustellen.
Geekosaurier
15

In CentOS 7 Docker Image musste ich das Paket einfach installieren initscripts, damit dieses Skript installiert werden konnte:

yum install -y initscripts

(Dank dieser Ausgabe, beidocker-library der ich mir dieses Commit angesehen habe )

Anthony O.
quelle
Dies hat mein Problem mit Jenkins auf Fedora 24 in einem Docker-Container behoben. (nur dnfstatt yumnatürlich verwendet). Vielen Dank!
Geerlingguy
Dies funktioniert auch, wenn MarkLogic 9 in einem Centos7-Docker-Container installiert wird. In den Installationsdokumenten wird nur erwähnt, dass lib.so.6 und lsb-core-amd64 erforderlich sind. Da es sich jedoch um eine vollständige CentOS 7-Installation handelt, wird übersehen, dass Sie das initscripts-Paket benötigen.
Alc6379
12

Das ist absolut vertriebsabhängig. Sie müssen wirklich die Distribution herausfinden, um ein passendes Init-Skript zu schreiben.

Sie können sich auch an die LSB-Spezifikation (Linux Standard Base) halten und hoffen, dass dies auch bei der betreffenden Distribution der Fall ist. Die aktuelle Spezifikation schreibt vor, dass die Standard-Init-Skriptfunktionen verfügbar sind als /lib/lsb/init-functions( siehe Dokumentation hier ). Auf Fedora und anderen Red Hat-bezogenen Distributionen wird dies durch das redhat-lsbPaket bereitgestellt, das optional ist .

Sie müssen also wirklich herausfinden, worauf Sie abzielen. Es tut uns leid.

mattdm
quelle
1

Hinzufügen einer neuen Antwort

Wie in anderen Antworten erwähnt, bieten Linux Standard Base (LSB) -Spezifikationen eine Möglichkeit, plattformunabhängige init.dStartskripten mit den hier aufgelisteten, von LSB definierten Init-Funktionen zu schreiben

Alle LSB - konformen Distributionen (alle Großen) liefern die Datei /lib/lsb/init-functionsin der Meta-Paket (die die genannten Funktionen definiert) , lsb-core-noarchdie die Verteilung Paketmanager installiert werden kann , mit $PKGMAN $INSTOPT lsb-core-noarch( yum, dnf, apt, ...).

Ein Beispiel für ein solches Init-Skript ist dieses .

Angesichts der Tatsache, dass systemdder De-facto-System- und Service-Manager jetzt für die meisten Distributionen verwendet wird, ist es jedoch besser, ein zu schreiben, systemd service unitanstatt ein zu schreiben initscript.

Samveen
quelle
0

Ich habe diese Funktionen vermisst, als ich zu Ubuntu gewechselt bin, also habe ich eine Bibliothek erstellt, die ihre Funktionalität nachbildet : Funktionen .

Marcus Downing
quelle
0

Ich habe den gleichen Fehler erhalten, als ich meinen Docker-Container ausführte. Es wurde behoben, indem in meinem Dockerfile die folgende Zeile hinzugefügt wurde

RUN yum install -y initscripts
Thavaprakash Swaminathan
quelle