RHEL6 Não consigo fazer meu script ser executado no desligamento e reinicialização

4

Estou tentando executar um script em cada desligamento e reinicialização, mas o script nunca é executado.

  1. Eu criei o script baseRhel64 e salvei-o em /etc/rc.d/init.d
  2. eu fiz chkconfig --add baseRhel64
  3. Eu incluí no script

    #chkconfig --list
    # chkconfig: 06 10 10
    
  4. Verifiquei que o script S10 foi criado em /etc/rc0.d/S10baseRhel64 e /etc/rc6.d/S10baseRhel64

O seguinte é o meu script:

#!/bin/sh

#chkconfig --list
# chkconfig: 06 10 10

start(){
    echo "'basename $0' start"
    touch /root/installscripts/test1
}

stop(){
    echo "'basename $0' stop"
    touch /root/installscripts/test2
    touch /root/installscripts/"'basename $0'"
}

case "$1" in
    start) start;;
    stop) stop;;
    *) 
    echo $"Usage: $0 {start|stop}"
    RETCAL=1
esac
exit 0
    
por Gidi Kern 08.07.2014 / 10:06

3 respostas

2

Quando você configura um script de init personalizado no RH EL 6, nomeado por exemplo "service_name", é necessário criar, durante a fase inicial, o arquivo de bloqueio / var / lock / subsys / service_name caso contrário, o script não será executado durante o desligamento do sistema (init 0 ou init 6). Ao mesmo tempo, você deve configurar "rm -f" do arquivo de bloqueio durante a fase de parada.

Veja link

    
por 13.07.2015 / 11:47
1

Se você verificar o que está em /etc/rc0.d e /etc/rc6.d , verá que antes de chegar ao seu serviço, o sistema executará primeiro killall (prioridade 00) e, em seguida, halt ( prioridade 01).

Embora o seu serviço estivesse programado para ser executado em seguida, o computador já parou.

lrwxrwxrwx 1 root root 17 Sep 28  2012 S00killall -> ../init.d/killall
lrwxrwxrwx 1 root root 14 Sep 28  2012 S01halt -> ../init.d/halt
lrwxrwxrwx 1 root root 14 Jul  8 21:16 S10test -> ../init.d/test

O que eu faria se fosse você, é habilitar o script em runlevels que você normalmente usa, digamos 345 e depois trocar start with stop, como todos os daemons que estejam chkconfig: para estarem rodando no seu runlevel atual será chamado ao parar e reinicializar com stop arg, antes chegar aos serviços que ele deve iniciar .

Se você quer que o seu script seja executado no último, antes de matar tudo e depois parar o seu computador, verifique qual é o mais alto (o meu é K92iptables , então para mim seria > 92 para parar a prioridade).

Então chkconfig --del baseRhel64 primeiro, depois altere o script para que chkconfig linha leia # chkconfig: 345 10 93

Seu script seria semelhante a este, com os nomes das funções de início e parada trocados:

#!/bin/sh

#chkconfig --list
# chkconfig: 345 10 93

stop(){
    echo "'basename $0' stop"
    touch /root/installscripts/test1
}

start(){
    echo "'basename $0' start"
    touch /root/installscripts/test2
    touch /root/installscripts/"'basename $0'"
}

case "$1" in
    start) start;;
    stop) stop;;
    *);;
    echo $"Usage: $0 {start|stop}"
    RETCAL=1
esac
exit 0
    
por 08.07.2014 / 21:38
0

Eu tenho uma boa solução para você a) Um script como este

#!/bin/sh
#
# localshutdown
#
# chkconfig:   06 01 25
# description: localshutdown script
#              

### BEGIN INIT INFO
# Provides: 
# Required-Start: 
# Required-Stop: 
# Should-Start: 
# Should-Stop: 
# Default-Start: 0 6 
# Default-Stop:
# Short-Description: 
# Description:      
### END INIT INFO

# Source function library.

start() {
    echo "Your commands here"
    touch /root/funziona #use it for a test
}

stop() {
    echo "nothing" >/dev/null 2>&1
}

restart() {
    stop
    start
}

case "$1" in
    start)
        start
        $1
        ;;
    stop)
        stop
        $1
        ;;
    restart)
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart}"
        exit 2
esac
exit $?

Então

chkconfig --add /etc/init.d/yourscript.sh

então

chkconfig --level 06 yourscript.sh on
chkconfig --level 12345 yourscript.sh off

Testado e trabalhando

    
por 06.02.2015 / 22:12