Como rodar um script como se estivesse rodando na inicialização?

4

Eu tenho um script em execução no momento da inicialização, no entanto, ele está me dando erros que vejo no arquivo de log. Quando eu o executo manualmente, ele corre bem - provavelmente o ambiente é alterado.

Existe uma maneira de executar esse script nas condições em que ele está sendo executado na inicialização sem reiniciar?

O script está localizado em /etc/init.d com um link simbólico em /etc/rc5.d/S97mounter.sh .

    
por Fluffy 08.10.2014 / 10:07

3 respostas

4

Você pode executar como root

env - scriptname

Isso limpará seu ambiente antes de executar o script, mas também manterá seu shell . Para limpar o ambiente e definir o shell como sh , faça o seguinte:

env -i /bin/sh -c scriptname

Isso executará o script usando /bin/sh . No entanto, isso não simulará completamente o ambiente de inicialização, pois isso não conta para os outros serviços que podem não estar em execução no momento.

Eu encontrei uma pergunta semelhante para simular o ambiente do crontab e há uma solução muito útil publicada por mmccoo .

Usando isso, você pode executar isso em um script e reinicializar o host, depois usar o arquivo de ambiente para carregar seu ambiente:

parte de um script de inicialização:

env > /var/tmp/bootenv

Em seguida, no tempo de execução normal para definir o mesmo ambiente de inicialização, faça o seguinte:

env - 'cat /var/tmp/bootenv' /bin/sh -c scriptname
    
por 08.10.2014 / 10:25
0

Algumas coisas podem ser diferentes quando um programa é iniciado por meio de uma sessão de usuário em vez de um script de inicialização:

  • O programa herda muitas variáveis de ambiente (incluindo PATH , HOME ,…).
  • O programa herda vários descritores de arquivos, incluindo um terminal.
  • Os limites podem ser diferentes.

Para executar um programa com um ambiente mínimo e fechar os descritores de arquivo padrão, você pode usar algo como

env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin myprogram </dev/null >/dev/null 2>/dev/null

Verifique a página init man ou outra documentação em seu sistema para ver quais variáveis de ambiente ela define. Muitos programas destinados a serem executados como daemons precisarão de PATH e nada mais. O valor PATH acima é o padrão para o init no Debian.

    
por 09.10.2014 / 03:01
-1

Sem mais informações sobre o que seu script está fazendo e quais erros você está recebendo, é difícil dar uma resposta precisa. Dito isto, é provavelmente possível recriar o ambiente, mas provavelmente será muito difícil, exigindo desmontar ou montar sistemas de arquivos ou outras coisas divertidas.

Uma alternativa poderia ser criar uma máquina virtual usando algo como VirtualBox ou KVM e execute sua depuração usando isso, permitindo que você reinicialize a máquina virtual quantas vezes for necessário sem precisar reinicializar sua máquina host.

    
por 08.10.2014 / 10:21