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.