Como executar um script bash no momento da inicialização

0

Sei que essa pergunta foi feita várias vezes, mas simplesmente não consigo fazê-la funcionar.

Aqui estão as etapas que eu tomei para fazê-lo funcionar:

  1. escreveu o script salvo como collection.sh
  2. mudou collection.sh- se para/etc/init.d
  3. executado $ sudo chmod 711 /etc/init.d/collection.shpara definir permissões para executar o script
  4. executado $ ln -s /etc/init.d/collection.sh /etc/rc0.d/para criar um link simbólico no/etc/rc0.d
  5. reiniciou a máquina com $ sudo reboot

Essas etapas não tiveram êxito na execução collection.shna inicialização. Então, alguém pode apontar o que fiz de errado?

Pensei que talvez rc?.destivesse criando um link simbólico na pasta errada, pois há rcpastas 0-6 e S. Em caso afirmativo, em que pasta deve ser feita?

JDOdle
fonte
Sem saber o que collection.shdeveria estar fazendo ou o que você espera que esteja falhando, é quase impossível responder como está.
precisa saber é o seguinte

Respostas:

0

Você está fazendo 3 coisas erradas que eu vejo.

Primeiro: você deseja colocar seu link /etc/rcS.d/virtual para que ele seja executado quando a máquina entrar no modo "usuário único" (sem rede disponível) e /etc/rc[2-5].d/para que ele seja executado quando a máquina entrar no modo "multiusuário" (níveis de execução 2 a 5) . O nível de execução 0 /etc/rc0.d/é inserido apenas quando a máquina é instruída a desligar. O nível de execução 6 é usado para "Reinicializar". Consulte a página da Wikipedia para níveis de execução UNIX

Segundo: o nome do link não pode ser collection.sh. Ele precisa estar no formato em S09collectionque "S" significa Iniciar e "09" significa Iniciar após todos os 08 scripts terem sido iniciados . Veja aqui para mais detalhes.

Terceiro: init é usado para iniciar os serviços daemon e não deve ser usado para executar o collection.sh diretamente. Você precisa criar um script init real que lide com o início e a parada do daemon collection.sh. Estude os scripts init pré-existentes /etc/init.d/para ter uma ideia de como eles funcionam. Como alternativa, consulte os links a seguir para obter mais documentação sobre como escrever scripts init.

  • Aqui está um tutorial sobre como escrever scripts init compatíveis com LSB. Isso é recomendado para distribuições Linux compatíveis com LSB. Notei que você marcou sua pergunta com "ubuntu", então devo mencionar que o Ubuntu (como todas as distribuições baseadas no Debian) é compatível com LSB.
  • Aqui está o guia wiki do Debian sobre como tornar os scripts init compatíveis com LSB.
  • Aqui está um "Quick and Dirty" como nos scripts de inicialização do estilo System V.
  • Aqui está um modelo para um script init do estilo System V no Github.

Além disso, você não precisa criar os links simbólicos diretamente nas /etc/rc?.dpastas. Todas as principais distribuições possuem ferramentas automatizadas para isso. Veja este artigo para mais detalhes.

user2121874
fonte
0

É difícil saber por que isso não está funcionando sem a visualização do script, mas as etapas que você tomou parecem razoáveis.

Algumas possibilidades que explicam a falha podem ser

  • Você não possui algo como #! / Bin / bash como a primeira linha do script
  • Você está confiando em caminhos para binários que não foram configurados.
  • Seu script não leva em consideração que os scripts de inicialização passam parâmetros como iniciar, parar, recarregar etc.

Outro método de executar um script na inicialização (para a maioria das distribuições) é simplesmente adicioná-lo ao /etc/rc.local - isso tem a vantagem de ser executado por último, para que os pré-requisitos sejam atendidos.

davidgo
fonte
0

Os links simbólicos precisam ser prefixados com uma chave de três caracteres que consiste em 'S' para iniciar ou 'K' para matar / parar, seguido por uma ordem de dois dígitos.

A maioria das distribuições inclui um programa como update-rc.desse que criará e removerá os links simbólicos conforme desejado. Experimente o comando man -k rc.dpara encontrar a documentação.

Você pode ter um modelo em seu /etc/init.ddiretório. Pode incluir comentários especialmente formatados com o objetivo de fornecer os parâmetros para o programa de atualização do rd.d. Se você não possui um modelo, provavelmente possui um script simples que pode ser usado como modelo.

Algumas distribuições estão mudando para métodos alternativos de executar a inicialização. Verifique a documentação da sua distribuição.

BillThor
fonte