Nenhum arquivo ou diretório /etc/init.d/functions

20

Eu criei um script de inicialização para iniciar / reiniciar / parar um grupo de aplicativos. Eu usei o lib /etc/init.d/functions no meu script. Está funcionando bem no meu sistema, mas não funciona para meu cliente; ele está recebendo o erro:

No such file or directory /etc/init.d/functions

Agora eu não sei qual distro linux meu cliente usa. O arquivo init.d/functions é diferente para diferentes distros do Linux? Se sim, como posso encontrá-lo?

    
por tecman 15.03.2011 / 21:05

5 respostas

24

É específico para qualquer distribuição que você esteja executando. Debian e Ubuntu possuem /lib/lsb/init-functions ; SuSE tem /etc/rc.status ; nenhum deles é compatível com os outros. Na verdade, algumas distribuições não usam /etc/init.d , ou usam de forma incompatível (o Slackware e o Arch me ocorrem fora do topo do meu cabeça, há outros).

    
por 15.03.2011 / 21:18
12

Isso é absolutamente dependente da distribuição. Você realmente precisará descobrir a distro para escrever um script de inicialização adequado.

Você também pode seguir a especificação LSB (Linux Standard Base) e esperar que a distro em questão também o faça. A especificação atual determina que as funções padrão do script de inicialização estejam disponíveis como /lib/lsb/init-functions ( veja os documentos aqui ). No Fedora e em outras distribuições relacionadas à Red Hat, isso é fornecido pelo pacote redhat-lsb , que é opcional .

Então, você realmente precisa descobrir o que está segmentando. Desculpe.

    
por 15.03.2011 / 21:24
11

Em imagem do Docker do CentOS 7 eu tive que simplesmente instalar o pacote initscripts para que este script fosse instalado:

yum install -y initscripts

(Agradecimentos a este problema em docker-library que me fez ver este commit )

    
por 23.02.2017 / 15:52
0

Eu senti falta dessas funções quando me mudei para o Ubuntu, então criei uma biblioteca que recria sua funcionalidade: efunctions .

    
por 09.01.2013 / 12:08
0

Adicionando uma resposta recente

Como observado em outras respostas, as especificações do Linux Standard Base (LSB) fornecem uma maneira de escrever scripts de inicialização baseados em init.d independentes da plataforma, usando as funções init definidas pelo LSB conforme listado aqui

Todas as distribuições compatíveis com LSB (todas as grandes) fornecem o arquivo /lib/lsb/init-functions (que define as funções listadas) no meta-pacote lsb-core-noarch que pode ser instalado usando o gerenciador de pacotes da distribuição $PKGMAN $INSTOPT lsb-core-noarch ( yum , dnf , apt , ...).

Um exemplo de tal script de inicialização é this .

No entanto, considerando como systemd é agora o sistema e o gerenciador de serviços para a maioria das distribuições, é melhor escrever um systemd service unit em vez de escrever um initscript .

    
por 29.03.2017 / 14:29