chkconfig $ svc reset não entra em vigor se for executado pelo serviço pri init.d superior na inicialização?

1

Em um derivado centos 6 (Amazon Linux), tenho um ecrinit de script init.d que serve para ativar / desativar alguns serviços na inicialização do sistema (com base no conteúdo de um arquivo de propriedades no disco):

if [[ "$nodeType" == "foo" ]]; then
 #turn off mysql, turn on proftpd
 service mysqld stop
 chkconfig mysqld off # prevent lower-pri mysqld service from 

 chkconfig proftpd reset # re-enables at run levels 2-4
fi

Como o pri pri de ecrinit é 60 e o proftpd é 88, esperava-se que o último fosse iniciado pelo processo de inicialização, já que chamar o reset do chkconfig acima garantiu que os arquivos apropriados existissem em /etc/rc3.d (confirmed).

Mas isso não parece ser o caso, já que 'start' nunca é chamado em proftpd (adicionei uma declaração de log ao corpo do script posterior para confirmar) se eu emitir 'chkconfig proftpd off' antes de fazer 'init 6'. Em outras palavras, parece que o processo de inicialização verifica o conteúdo do /etc/rc3.d antes que o ecrinit seja executado (e não detecta novos arquivos no mesmo diretório durante o processo de inicialização) ...

Esse é o comportamento esperado? Em caso afirmativo, como posso controlar quais serviços devem ser habilitados em uma determinada inicialização (e evitar manualmente iniciá-los para preservar a ordem de prioridade)?

Cabeçalhos de script de inicialização

[root@lb1 ~]# head /etc/init.d/proftpd
#!/bin/bash
# $Id: proftpd.init,v 1.1 2004/02/26 17:54:30 thias Exp $
#
# proftpd       This shell script takes care of starting and stopping
#               proftpd.
#
# chkconfig: 234 88 12
# description: ProFTPd is an enhanced FTP server with a focus towards \
#              simplicity, security, and ease of configuration. \
#              It features a very Apache-like configuration syntax, \
[root@lb1 ~]# head /etc/init.d/ecrinit
#!/bin/bash
#
# chkconfig: 234 19 10
# description: Initializes stuff

chkconfig --list (após a inicialização)

[root@lb1 rc3.d]$ chkconfig --list proftpd
proftpd         0:off   1:off   2:on    3:on    4:on    5:off   6:off
[root@lb1 rc3.d]$ chkconfig --list ecrinit
ecrinit         0:off   1:off   2:on    3:on    4:on    5:off   6:off

uname -a Linux 2.6.35.14-97.44.amzn1.i686 # 1 SMP seg 24 de outubro às 16:03:22 UTC 2011 i686 i686 i386 GNU / Linux

    
por Nikita 14.03.2012 / 02:27

1 resposta

2

Veja o script /etc/rc , que faz o seguinte:

for i in /etc/rc$runlevel.d/S* ; do

o script já expandiu a lista de scripts de inicialização disponíveis antes de serem executados; mudanças feitas via chkconfig (ou manipulação direta do sistema de arquivos) não serão visíveis.

Se você mover sua lógica para o final do processo de inicialização, poderá iniciar os serviços explicitamente:

if [[ "$nodeType" == "foo" ]]; then
 #turn off mysql, turn on proftpd
 service mysqld stop
 chkconfig mysqld off # prevent lower-pri mysqld service from 

 service protftpd start
fi

Provavelmente não há muito sentido em usar chkconfig para habilitar proftpd neste exemplo, já que presumivelmente a lógica aqui será iniciada assim mesmo na próxima vez que o sistema for inicializado.

Você também pode querer investigar o fantoche , que é bom em fazer exatamente esse tipo de coisa.

    
por 14.03.2012 / 03:43