Criei um script de inicialização para iniciar / reiniciar / parar um grupo de aplicativos. Eu usei a lib /etc/init.d/functions
no meu script. Está funcionando bem no meu sistema, mas não está funcionando para o meu cliente; ele está recebendo o erro:
Esse arquivo ou diretório não existe /etc/init.d/functions
No momento, não sei qual distribuição Linux meu cliente usa. O init.d/functions
arquivo é diferente para diferentes distribuições Linux? Se sim, como posso encontrá-lo?
init-script
tecman
fonte
fonte
Respostas:
É específico para qualquer distribuição que você esteja executando. Debian e Ubuntu têm
/lib/lsb/init-functions
; SuSE tem/etc/rc.status
; nenhum deles é compatível com os outros. De fato, algumas distribuições não usam/etc/init.d
, ou de forma incompatível (o Slackware e o Arch me ocorrem do alto da minha cabeça; existem outros).fonte
/etc/init.d/functions
não existem em outras distribuições. Toda distribuição tem suas próprias regras/etc/init.d
e sua biblioteca de funções (se houver) é orientada em torno dessas regras; por exemplo, SuSErc_status -s
. Existem algumas funções "padrão" do LSB, que devem ser encontradas/lib/lsb/init-functions
, mas seu cliente pode não estar executando uma distribuição que foi atualizada para fornecê-la.Na imagem do CentOS 7 Docker, eu tinha que simplesmente instalar o pacote
initscripts
para que este script fosse instalado:(Graças a esta questão na
docker-library
qual me fizemos olhar para esse commit )fonte
dnf
vezyum
de, é claro). Obrigado!Isso é absolutamente dependente da distribuição. Você realmente precisará descobrir a distribuição para escrever um script init que corresponda corretamente.
Você também pode seguir a especificação LSB (Linux Standard Base) e esperar que a distribuição em questão também o tenha feito. A especificação atual determina que as funções padrão do script init estejam disponíveis como
/lib/lsb/init-functions
( consulte a documentação aqui ). No Fedora e em outras distros relacionadas ao Red Hat, isso é fornecido peloredhat-lsb
pacote, que é opcional .Então, você realmente precisa descobrir o que está segmentando. Desculpe.
fonte
Adicionando uma resposta recente
Conforme observado em outras respostas, as especificações Linux Standard Base (LSB) fornecem uma maneira de escrever
init.d
scripts de inicialização independentes da plataforma , usando as funções init definidas pelo LSB, conforme listado aquiTodos os LSB distribuições compatíveis (todos os grandes) fornecer o arquivo
/lib/lsb/init-functions
(que define as funções listadas) na meta-pacotelsb-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 um script de inicialização é esse .
No entanto, considerando como
systemd
agora é o gerente de sistema e serviço de fato para a maioria das distribuições, é melhor escrever um emsystemd service unit
vez de escrever uminitscript
.fonte
Eu perdi essas funções quando me mudei para Ubuntu, então eu criei uma biblioteca que recria a sua funcionalidade: efunctions .
fonte
Eu também recebi o mesmo erro enquanto executo meu contêiner de docker. Foi corrigido adicionando a linha abaixo no meu Dockerfile
fonte