Execute o script no nível de execução 1

0

Estou tentando executar um script no nível de execução 1 de /etc/inittab . O script que quero executar parece:

#!/bin/bash
while [ 1 ]
do
  #do something
  sleep 1
  #do something
  sleep 1
done

A linha inittab tem esta aparência: d666:123456:respawn:/root/script_to_run.sh

No runlevel 2-6 tudo funciona bem. Quando mudo para o nível de execução 1 ( init 1 ), o script é interrompido e não é mais executado.

Além disso, estou tentando manipular um script para ser chamado logo antes de o nível de execução 0 ser digitado. Eu tentei esta linha em inittab : d667:0:wait:/root/script_to_run_right_before_runlevel_0.sh

    
por arminb 11.02.2013 / 13:44

1 resposta

1

A documentação Debian não é explícita, init(8) adverte apenas que os runlevels S, 0,1,6 são reservados, e também:

On a Debian system, entering runlevel 1 causes all processes to be killed except for kernel threads and the script that does the killing and other processes in its session. As a consequence of this, it isn’t safe to return from runlevel 1 to a multi-user runlevel: daemons that were started in runlevel S and are needed for normal operation are no longer running. The system should be rebooted.

O nível de execução 1 em /etc/inittab é:

l1:1:wait:/etc/init.d/rc 1

/etc/init.d/rc 1 chamará /etc/rc1.d/S* , incluindo S01killprocs , que mata a maioria das coisas que pode encontrar e S21single , que executa " exec init -t1 S ", para alternar para o modo de usuário único, portanto, o nível de execução 1 é muito curto -vivia. O modo de usuário único "S" em /etc/inittab é:

~~:S:wait:/sbin/sulogin

, o que significa que init simplesmente aguardará até que sulogin retorne antes de fazer qualquer outra coisa.

Em suma, os runlevels "1" e "S" são "hands-off" no Debian (e provavelmente a maioria dos outros unixen também).

Se você colocar sua entrada inittab acima da entrada do sistema "S", init respawning e S01killprocs irão lutar por um tempo (você pode não conseguir observar isso sem um syslog em execução), o que provavelmente é atrevido e provavelmente não fará o que você quer.

Você pode conseguir alguns dos recursos necessários, modificando os scripts de inicialização e implementando um /etc/initscipt para monitorar e registrar as várias ações de init . Estas são uma boa maneira de mangueira de um sistema de trabalho, então eu sugiro experimentar em uma vm primeiro;).

Eu acho que suas outras opções, nenhuma das quais parece muito atraente, são tentar um% diferente init , ou ver se você pode fazer o que você quer através de um thread do kernel.

    
por 11.02.2013 / 16:20