Utworzyłem skrypt startowy do uruchamiania / restartowania / zatrzymywania grupy aplikacji. Użyłem lib /etc/init.d/functions
w moim skrypcie. Działa dobrze w moim systemie, ale nie działa dla mojego klienta; pojawia się błąd:
Brak takiego pliku lub katalogu /etc/init.d/functions
W tej chwili nie wiem, z której dystrybucji linux korzysta mój klient. Czy init.d/functions
plik jest inny dla różnych dystrybucji Linuksa? Jeśli tak, to jak mogę to znaleźć?
init-script
tecman
źródło
źródło
Odpowiedzi:
Jest to specyficzne dla każdej dystrybucji, którą prowadzisz. Debian i Ubuntu mają
/lib/lsb/init-functions
; SuSE ma/etc/rc.status
; żaden z nich nie jest kompatybilny z innymi. W rzeczywistości niektóre dystrybucje w ogóle nie używają/etc/init.d
lub używają go w sposób niezgodny (Slackware i Arch przychodzą mi z głowy; są też inne).źródło
/etc/init.d/functions
nie istnieją w innych dystrybucjach. Każda dystrybucja ma swoje własne reguły/etc/init.d
, a biblioteka funkcji (jeśli istnieje) jest zorientowana wokół tych reguł; na przykład SuSErc_status -s
. Istnieją pewne „standardowe” funkcje LSB, które powinny być dostępne/lib/lsb/init-functions
, ale twój klient może nie uruchamiać dystrybucji, która została zaktualizowana, aby ją zapewnić.W obrazie Docker CentOS 7 musiałem po prostu zainstalować pakiet
initscripts
, aby zainstalować ten skrypt:(Dzięki temu problemowi,
docker-library
który sprawił, że spojrzałem na to zatwierdzenie )źródło
dnf
zamiastyum
oczywiście). Dzięki!To całkowicie zależy od dystrybucji. Naprawdę będziesz musiał znaleźć dystrybucję, aby napisać odpowiednio dopasowany skrypt startowy.
Możesz także postępować zgodnie ze specyfikacją LSB (Linux Standard Base) i mieć nadzieję, że dana dystrybucja również. Obecna specyfikacja nakazuje, aby standardowe funkcje skryptu inicjującego były dostępne jako
/lib/lsb/init-functions
( patrz dokumenty tutaj ). W Fedorze i innych dystrybucjach związanych z Red Hat, które są dostarczane przezredhat-lsb
pakiet, który jest opcjonalny .Tak więc naprawdę musisz dowiedzieć się, na co celujesz. Przepraszam.
źródło
Dodanie ostatniej odpowiedzi
Jak zauważono w innych odpowiedziach, specyfikacje Linux Standard Base (LSB) zapewniają sposób pisania niezależnych od platformy
init.d
skryptów startowych, przy użyciu zdefiniowanych przez LSB funkcji inicjujących wymienionych tutajWszystkie dystrybucje LSB zgodne (wszystkie te duże) dostarczyć plik
/lib/lsb/init-functions
(który określa wymienione funkcje) w meta-pakietulsb-core-noarch
, który można zainstalować za pomocą menedżera pakietów dystrybucji w$PKGMAN $INSTOPT lsb-core-noarch
(yum
,dnf
,apt
, ...).Przykład takiego skryptu inicjującego jest następujący .
Biorąc jednak pod uwagę fakt, że
systemd
obecnie jest to de facto menedżer systemu i usług dla większości dystrybucji, lepiej napisaćsystemd service unit
zamiast pisaćinitscript
.źródło
Tęskniłem za tymi funkcjami po przejściu na Ubuntu, więc utworzyłem bibliotekę, która odtwarza ich funkcjonalność: funkcje .
źródło
Ja również dostałem ten sam błąd podczas uruchamiania kontenera dokowanego. Zostało to naprawione poprzez dodanie poniżej wiersza w moim pliku Docker
źródło