1 votes

init.d script fonctionnait bien sur Ubuntu 10.10 mais pas sur 11.10 malgré la correction de l'en-tête LBS

Sur Ubuntu 11.10, si j'exécute /usr/bin/cserver -c /etc/cserver.conf & ça marchera très bien.

Mais si je cours service cserver start o /etc/init.d/cserver start comme je l'ai fait en 10.10, il ne le fera pas. Il dit juste "starting cServer", et c'est la dernière fois que j'en entends parler.

Voici le 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 $?

Bien que je n'aie jamais eu à le faire sur le serveur original, et que sysv-rc-conf l'ait montré présent dans la liste et démarrant aux bons niveaux, j'ai essayé manuellement de faire le update-rc.d et il s'est plaint d'un en-tête lsb invalide, ce qui m'a conduit à ceci question y guide . J'ai donc modifié l'en-tête comme ci-dessus, et voici à quoi cela ressemblait avant :

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

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

Maintenant, il y a cette ligne à propos de "Source function library", mais ce répertoire n'existe même pas et la ligne est commentée de toute façon.

J'ai vérifié les permissions, les liens symboliques, etc. sur l'ancien serveur, et tout semble identique.

Je suis un peu étourdi et confus maintenant - peut-être qu'une paire d'yeux frais et plus informés peut trouver quelque chose ici ? Merci.

MISE À JOUR et ÉDITION : Merci kubankczyk - Je suis allé pour votre suggestion de copier un autre trouvé le script de démarrage de nginx pour être le plus simple, et a abouti à ce qui suit :

#!/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

Je ne sais pas si c'est correct, mais au moins ça démarre le service ! Merci.

1voto

kubanczyk Points 13302

Votre script a été écrit pour chkconfig (tel qu'utilisé dans Suse Linux) pas pour update-rc.d. Le mieux que vous puissiez faire maintenant (si vous ne voulez pas utiliser chkconfig) est de prendre un simple script de votre /etc/init.d, de le lire, de le comprendre, de le copier et de le modifier pour exécuter cserver.

En particulier, vérifiez que la commande "daemon" est utilisée correctement dans votre script en conjonction avec l'esperluette &.

Commencez par dépanner le scénario le plus simple. Changez temporairement les OPTIONS en OPTIONS=" -c /etc/cserver.conf". Ne testez que le script nu (si cela ne fonctionne pas, l'option service cserver start ne fonctionnera pas, que l'en-tête soit LSB ou non) :

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

(modifier la question avec les résultats)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X