Ich habe ein Startskript erstellt, um eine Gruppe von Anwendungen zu starten / neu zu starten / zu stoppen. Ich habe die lib /etc/init.d/functions
in 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/functions
Datei für verschiedene Linux-Distributionen unterschiedlich? Wenn ja, wie kann ich es finden?
init-script
tecman
quelle
quelle
Antworten:
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.d
oder inkompatibel (Slackware und Arch sind mir auf den ersten Blick aufgefallen; es gibt andere).quelle
/etc/init.d/functions
existieren in anderen Distributionen nicht. Jede Distribution hat ihre eigenen Regeln für/etc/init.d
und ihre Funktionsbibliothek (falls vorhanden) orientiert sich an diesen Regeln. Zum Beispiel SuSE'src_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.In CentOS 7 Docker Image musste ich das Paket einfach installieren
initscripts
, damit dieses Skript installiert werden konnte:(Dank dieser Ausgabe, bei
docker-library
der ich mir dieses Commit angesehen habe )quelle
dnf
stattyum
natürlich verwendet). Vielen Dank!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 dasredhat-lsb
Paket bereitgestellt, das optional ist .Sie müssen also wirklich herausfinden, worauf Sie abzielen. Es tut uns leid.
quelle
Hinzufügen einer neuen Antwort
Wie in anderen Antworten erwähnt, bieten Linux Standard Base (LSB) -Spezifikationen eine Möglichkeit, plattformunabhängige
init.d
Startskripten mit den hier aufgelisteten, von LSB definierten Init-Funktionen zu schreibenAlle LSB - konformen Distributionen (alle Großen) liefern die Datei
/lib/lsb/init-functions
in der Meta-Paket (die die genannten Funktionen definiert) ,lsb-core-noarch
die 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
systemd
der De-facto-System- und Service-Manager jetzt für die meisten Distributionen verwendet wird, ist es jedoch besser, ein zu schreiben,systemd service unit
anstatt ein zu schreibeninitscript
.quelle
Ich habe diese Funktionen vermisst, als ich zu Ubuntu gewechselt bin, also habe ich eine Bibliothek erstellt, die ihre Funktionalität nachbildet : Funktionen .
quelle
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
quelle