Como executar um script como se estivesse sendo executado na inicialização?

Como executar um script como se estivesse sendo executado na inicialização?

Eu tenho um script em execução no momento da inicialização, mas ele está apresentando erros que vejo no arquivo de log. Quando executo manualmente, ele funciona bem - provavelmente o ambiente foi alterado.

Existe uma maneira de executar esse script em condições de execução na inicialização, sem reiniciar?

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

Responder1

Você poderia executar como root

env - scriptname

Isso limpará seu ambiente antes de executar o script, no entanto, também manterá seu arquivo 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 não conta para outros serviços que podem não estar em execução no momento.

Encontrei uma pergunta semelhante para simular o ambiente crontab e há uma solução muito útil postada pormmccoo.

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

parte de um script de inicialização:

env > /var/tmp/bootenv

Então, em 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

Responder2

Algumas coisas que 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 arquivo, 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 initpágina de manual ou outra documentação do seu sistema para ver quais variáveis ​​de ambiente ele define. Muitos programas destinados a serem executados como daemons serão necessários PATHe nada mais. O PATHvalor acima é o padrão para init no Debian.

Responder3

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ívelpara 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 comoCaixa VirtualouKVMe execute sua depuração usando isso, permitindo reinicializar a máquina virtual com a freqüência necessária, sem exigir que você reinicialize sua máquina host.

informação relacionada