init.d script funcionou bem no Ubuntu 10.10, mas não no 11.10, apesar da correção do cabeçalho LBS

1

No Ubuntu 11.10, se eu rodar /usr/bin/cserver -c /etc/cserver.conf & , tudo funcionará bem.

Mas se eu executar serviço cserver start ou /etc/init.d/cserver start como fiz em 10.10, não será. Apenas diz "iniciando cServer", e é o último que ouço sobre isso.

Aqui está o script:

#!/bin/bash
#
### BEGIN INIT INFO
# Provides:          cserver
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Should-Start:      $network $time
# Should-Stop:       $network $time
# Default-Start:     3 4 5
# Default-Stop:      0 1 2 6
# Short-Description: Start and stop the cserver server daemon
# Description:       Controls the cserver server daemon
### END INIT INFO
#
set -e
set -u
${DEBIAN_SCRIPT_DEBUG:+ set -v -x}

CSERVERDIR=/usr/bin
PROG=./cserver
OPTIONS=" -c /etc/cserver.conf > /dev/null 2>&1 &"

start() {
          echo -n "Starting cServer "
          cd $CSERVERDIR
      daemon $PROG $OPTIONS
          RETVAL=$?
          echo
          return $RETVAL
}
stop() {
          CSERVERPID=$(pidof cserver)
          if [ $CSERVERPID ] ; then
        echo -n "Stopping cServer "
            kill $(pidof cserver)
            RETVAL=$?
          else
            echo "cServer not running"
            RETVAL=1
          fi
          echo
          return $RETVAL
}
status() {
          CSERVERPID=$(pidof cserver)
          if [ $CSERVERPID ] ; then
            echo -n "cServer is running"
            RETVAL=0
          else
            echo -n "cServer is stopped"
            RETVAL=1
          fi
          echo
          return $RETVAL
}

# See how we were called.
RETVAL=0

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        stop
        start
        ;;
  status)
        status
        ;;
  *)
        echo $"Usage: $prog {start|stop|restart|status}"
        exit 1
esac

exit $?

Embora eu nunca tenha tido que fazer isso no servidor original, e o sysv-rc-conf o mostrou presente na lista e começando nos níveis corretos, eu tentei manualmente fazer o update-rc.d e ele reclamou de um erro cabeçalho lsb, que me levou a esta pergunta e guia . Então eu mudei o cabeçalho como acima, e aqui está o que parecia antes:

#!/bin/bash
#
#
# chkconfig: 345 99 99
#
# description: cserver init
# processname: cserver

# Source function library.
# . /etc/rc.d/init.d/functions

Agora, há essa linha sobre "Biblioteca de funções de origem", mas esse diretório nem existe e a linha é comentada de qualquer maneira.

Eu verifiquei as permissões e links simbólicos etc no servidor antigo e tudo parece idêntico.

Um pouco aturdido e confuso agora - talvez um par de olhos fresco e mais bem conhecido possa detectar alguma coisa aqui? Obrigado.

UPDATE e EDIT: Obrigado kubankczyk - Eu fui para sua sugestão de copiar outro encontrado o script de inicialização do nginx para ser o mais simples, e acabou com o seguinte:

#!/bin/sh

### BEGIN INIT INFO
# Provides:          cserver
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the cserver server
# Description:       starts cserver using start-stop-daemon
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/cserver
NAME=cserver
DESC=cserver
DAEMON_OPTS=" -c /etc/cserver.conf"

#test -x $DAEMON || exit 0
set -e
#set -u
#${DEBIAN_SCRIPT_DEBUG:+ set -v -x}

. /lib/lsb/init-functions


case "$1" in
    start)
        echo -n "Starting $DESC: "
        start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
            --exec $DAEMON -- $DAEMON_OPTS || true
        echo "$NAME."
        ;;

    stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
            --exec $DAEMON || true
        echo "$NAME."
        ;;

    restart|force-reload)
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --quiet --pidfile \
            /var/run/$NAME.pid --exec $DAEMON || true
        sleep 1
        start-stop-daemon --start --quiet --pidfile \
            /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true
        echo "$NAME."
        ;;

    status)
        status_of_proc -p /var/run/$NAME.pid "$DAEMON" cserver && exit 0 || exit $?
        ;;
    *)
        echo "Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest}" >&2
        exit 1
        ;;
esac

exit 0

Não tenho certeza se está correto, mas pelo menos inicia o serviço! Obrigado.

    
por talkingnews 17.12.2011 / 23:45

1 resposta

1

Seu script foi escrito para chkconfig (como usado no Suse Linux) e não para update-rc.d. O melhor que você pode fazer agora (se você não quiser usar o chkconfig) é pegar algum script simples do seu /etc/init.d, ler, entender, copiar e alterar para executar o cserver.

Em particular, verifique se o comando "daemon" é usado corretamente em seu script em conjunto com o "e comercial" &.

Inicie a solução de problemas no cenário mais simples. Altere temporariamente as OPTIONS para OPTIONS="-c /etc/cserver.conf". Teste apenas o script nu (se isso não funcionar, o service cserver start não funcionará se o cabeçalho for LSB ou não):

  su -
  export DEBIAN_SCRIPT_DEBUG=1
  /etc/init.d/cserver start 

(edite a pergunta com os resultados)

    
por 19.12.2011 / 07:34