Por que iniciar script e matar script não aparece em pares na pasta rcX.d?

1

Os scripts que precisam ser executados no momento da inicialização foram colocados no /etc/init.d e os arquivos contidos em /etc/rc*.d eram os links simbólicos apontados para arquivos em / etc / init.d.Além disso, os nomes dos links simbólicos indicam se o serviço deve ser iniciado (S *) ou interrompido (kill, K *) em um nível de execução específico. Eu emito um comando “ls -al” para inspecionar os arquivos no /etc/rc3.d , a saída da seguinte forma:

drwxr-xr-x.  2 root root 4096 Apr  6 23:04 .
drwxr-xr-x. 10 root root 4096 May 22  2015 ..
lrwxrwxrwx.  1 root root   20 May 22  2015 K50netconsole -> ../init.d/netconsole
lrwxrwxrwx.  1 root root   17 May 22  2015 K90network -> ../init.d/network
lrwxrwxrwx.  1 root root   17 May 22  2015 S00livesys -> ../init.d/livesys
lrwxrwxrwx.  1 root root   16 Apr  6 23:04 S85mongod -> ../init.d/mongod
lrwxrwxrwx.  1 root root   15 May 31  2015 S95jexec -> ../init.d/jexec
lrwxrwxrwx.  1 root root   22 May 22  2015 S99livesys-late -> ../init.d/livesys-late

Suponho que script de início e script de morte apareçam em pares, mas está errado, por quê?

    
por Blue Steel 19.07.2016 / 16:07

1 resposta

0

Se isso for para o RHEL6 ou semelhante do Linux, esses scripts geralmente são gerenciados por chkconfig(8) , o que garante que haja um script de início ou um script de parada para cada nível de execução, para cada serviço, não que eles sejam feitos em pares. (Não tenho certeza sobre o Ubuntu ou outros).

Da página man de chkconfig :

Note that for every service, each runlevel has either a start script 
or a stop script.  When switching runlevels, init will not re-start an 
already-started service, and will not re-stop a  service that is not running.

...

--add name
  This option adds a new service for management by chkconfig.  When a new service is added, 
  chkconfig ensures that the service has either a start or a kill entry in  every  runlevel.  
  If  any  runlevel is missing such an entry, chkconfig creates the 
  appropriate entry as specified by the default values in the init script.

Uma resposta para outra pergunta sobre runlevels descreve a convenção de nomenclatura.

Now, the naming scheme is also quite simple. Scripts whose name begins with an S will be started at the runlevel in question while those whose name begins with K will be killed.

Se você observar o script de alteração de nível de execução /etc/rc , poderá ver como, quando o nível de execução está sendo alterado, o S* é executado com o parâmetro start input, DEPOIS que os scripts K* são executados com% co_de parâmetro%. Ter scripts K e S significaria que o script é interrompido e iniciado em cada nível de execução.

# rc            This file is responsible for starting/stopping
#               services when the runlevel changes.
...
# First, run the KILL scripts.
for i in /etc/rc$runlevel.d/K* ; do
        ...
        $i stop
done
# Now run the START scripts.
for i in /etc/rc$runlevel.d/S* ; do
        ...
                exec $i start
        ...
done

Eu estou apenas olhando para a máquina RHEL6, então se alguém puder confirmar como outras distribuições diferem, por favor, faça.

    
por 10.01.2018 / 07:16