Estou confuso. Eu pensei que sabia como os scripts de inicialização do Linux funcionavam, e parece que não. Para referência eu estou trabalhando em um CentOS5.7 ligeiramente idoso.
Eu escrevi este script que basicamente não faz nada além de imprimir mensagens:
# cat /etc/init.d/dom
#!/bin/bash
#
# chkconfig: 345 95 5
# description: NOP test
# processname: dom
# Source function library.
. /etc/init.d/functions
RETVAL=0
prog="dom"
start() {
echo -n $"Starting $prog: "
echo
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
echo
return $RETVAL
}
restart() {
stop
start
}
reload() {
restart
}
status_at() {
echo "OK"
}
case "$1" in
start)
start
;;
stop)
stop
;;
reload|restart)
restart
;;
condrestart)
restart
;;
status)
status_at
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
exit 1
esac
exit $?
exit $RETVAL
Uma vez eu copiei para /etc/init.d/ o adicionei usando o chkconfig.
# chkconfig --add dom
# chkconfig --list dom
dom 0:off 1:off 2:off 3:on 4:on 5:on 6:off
O chkconfig cria um monte de links simbólicos para o /etc/init.d/dom.
# find /etc/rc* -name *dom
/etc/rc.d/rc5.d/S95dom
/etc/rc.d/rc6.d/K05dom
/etc/rc.d/rc3.d/S95dom
/etc/rc.d/rc1.d/K05dom
/etc/rc.d/rc4.d/S95dom
/etc/rc.d/rc0.d/K05dom
/etc/rc.d/init.d/dom
/etc/rc.d/rc2.d/K05dom
O serviço pode ser interrompido & iniciado manualmente:
# service dom restart
Stopping dom:
Starting dom:
Até agora, tudo isso é bom.
Quando eu inicio no initlevel 3, o 'start' (/etc/rc.d/rc3.d/S95dom) é chamado:
atd: [ OK ]
Starting dom:
Starting perfmon: [ OK ]
No entanto, quando eu desligo (runlevel 6) o 'kill' (/etc/rc.d/rc6.d/K05dom) não é chamado.
INIT: Switching to runlevel: 6
INIT: Sending processes the TERM signal
Stopping atd: [ OK ]
Stopping perfmon: [ OK ]
Deveria ter sido parado logo após atd (05).
Eu entendi mal alguma coisa? Como posso depurar isso?
[A pedido, mudei esta questão de: link ]