Nessun file o directory /etc/init.d/functions


21

Ho creato uno script di avvio per avviare / riavviare / arrestare un gruppo di applicazioni. Ho usato la lib /etc/init.d/functionsnella mia sceneggiatura. Funziona bene sul mio sistema, ma non funziona per il mio client; sta ottenendo l'errore:

Nessun file o directory /etc/init.d/functions

In questo momento non so quale distro Linux usi il mio client. Il init.d/functionsfile è diverso per le diverse distribuzioni Linux? In tal caso, come posso trovarlo?


Si noti che questo errore può anche essere causato da terminazioni di riga di Windows.
Emerson Rocha,

Risposte:


24

È specifico per qualsiasi distribuzione tu stia eseguendo. Debian e Ubuntu hanno /lib/lsb/init-functions; SuSE ha /etc/rc.status; nessuno di loro è compatibile con gli altri. In effetti, alcune distribuzioni non lo usano /etc/init.daffatto, né lo usano in modo incompatibile (Slackware e Arch mi vengono in mente dalla cima della mia testa; ce ne sono altri).


posso sapere qual è il file e dove si trova Redhat 5.5?
Tecman,

Inoltre, come posso trovare il nome e il percorso del file? c'è un modo per farlo o è che possiamo trovarlo solo dalla documentazione?
Tecman,

L'ho fatto guardando, poiché ho entrambi quelli disponibili; Non ho un'installazione Red Hat. Ma potresti aver perso l'importanza di ciò che ho detto in grassetto sopra: le funzioni nel tuo /etc/init.d/functions non esistono su altre distribuzioni. Ogni distribuzione ha le sue regole /etc/init.de la sua libreria di funzioni (se presente) è orientata attorno a quelle regole; per esempio, i SuSE rc_status -s. Ci sono alcune funzioni "standard" LSB, che dovrebbero essere presenti /lib/lsb/init-functions, ma il tuo client potrebbe non eseguire una distribuzione che è stata aggiornata per fornirla.
geekosaur,

15

Nell'immagine DockOS di CentOS 7 ho dovuto semplicemente installare il pacchetto initscriptsper poter installare questo script:

yum install -y initscripts

(Grazie a questo problema sudocker-library cui mi ha fatto guardare questo commit )


Questo risolto il mio problema usando Jenkins su Fedora 24 in un contenitore Docker. (appena usato dnfinvece yumovviamente). Grazie!
geerlingguy,

Questo funziona anche quando si installa MarkLogic 9 in un contenitore docker Centos7. I documenti di installazione menzionano solo la necessità di lib.so.6 e lsb-core-amd64, ma suppongo che dal momento che stanno parlando dell'installazione su un'installazione completa di CentOS 7, trascurerebbero che avresti bisogno del pacchetto initscripts.
alc6379,

12

Questo dipende assolutamente dalla distribuzione. Avrai davvero bisogno di scoprire la distro per scrivere uno script init correttamente abbinato.

Puoi anche seguire le specifiche LSB (Linux Standard Base) e sperare che anche la distribuzione in questione abbia funzionato. La specifica corrente impone che le funzioni standard dello script init siano disponibili come /lib/lsb/init-functions( vedere i documenti qui ). Su Fedora e altre distro relative a Red Hat, è fornito dal redhat-lsbpacchetto, che è facoltativo .

Quindi, devi davvero capire cosa stai prendendo di mira. Scusate.


1

Aggiunta di una risposta recente

Come notato in un'altra risposta, le specifiche Linux Standard Base (LSB) forniscono un modo per scrivere init.dscript di avvio basati su piattaforma indipendenti , usando le funzioni di init definite LSB come elencate qui

Tutte le distribuzioni conformi LSB (tutti i grandi) forniscono il file /lib/lsb/init-functions(che definisce le funzioni elencate) nel meta-pacchetto lsb-core-noarchche può essere installato utilizzando gestore dei pacchetti della distribuzione $PKGMAN $INSTOPT lsb-core-noarch( yum, dnf, apt, ...).

Un esempio di tale script init è questo .

Tuttavia, dato che systemdora è il sistema di fatto e il gestore dei servizi per la maggior parte delle distribuzioni, è meglio scrivere un systemd service unitinvece di scrivere un initscript.


0

Ho perso quelle funzioni quando mi sono trasferito a Ubuntu, così ho creato una libreria che ricrea la loro funzionalità: efunctions .


0

Anch'io ho avuto lo stesso errore mentre eseguo il mio contenitore docker. È stato risolto aggiungendo la riga sotto nel mio Dockerfile

RUN yum install -y initscripts
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.