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?


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).


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 )


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.


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.



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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.