Назад | Перейти на главную страницу

Сценарий init.d работал нормально на Ubuntu 10.10, но не на 11.10, несмотря на исправление заголовка LBS

В Ubuntu 11.10, если я запустил / usr / bin / cserver -c /etc/cserver.conf & это будет работать нормально.

Но если я убегу запуск службы cserver или /etc/init.d/cserver start как я сделал 10.10, этого не будет. Там просто написано «запуск cServer», и это последнее, что я слышал об этом.

Вот сценарий:

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

Хотя мне никогда не приходилось делать это на исходном сервере, и sysv-rc-conf показал, что он присутствует в списке и начинается с правильных уровней, я вручную попытался выполнить update-rc.d, и он пожаловался на недопустимый заголовок lsb, что привело меня к этому вопрос и руководство. Итак, я изменил заголовок, как указано выше, и вот как он выглядел раньше:

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

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

Теперь есть строка о «Библиотеке исходных функций», но этот каталог даже не существует, и строка все равно закомментирована.

Я проверил разрешения, символические ссылки и т. Д. На старом сервере, и все кажется идентичным.

Немного ошеломлен и сбит с толку - возможно, пара свежих и более знающих глаз что-то заметит здесь? Спасибо.

ОБНОВЛЕНИЕ и РЕДАКТИРОВАНИЕ: Спасибо kubankczyk - я пошел на ваше предложение о копировании другого, обнаружил, что сценарий запуска nginx самый простой, и в итоге получил следующее:

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

Не уверен, что это правильно, но по крайней мере запускает службу! Спасибо.

Ваш сценарий был написан для chkconfig (например, используемого в Suse Linux), а не для update-rc.d. Лучшее, что вы можете сделать сейчас (если вы не хотите использовать chkconfig), - это выбрать какой-нибудь простой скрипт из вашего /etc/init.d, прочитать его, понять, скопировать и изменить, чтобы запустить cserver.

В частности, убедитесь, что команда "daemon" правильно используется в вашем скрипте вместе с амперсандом &.

Начните устранение неполадок с самого простого сценария. Временно измените ОПЦИИ на ОПЦИИ = "-c /etc/cserver.conf". Протестируйте только чистый скрипт (если это не сработает, service cserver start не будет работать независимо от того, является ли заголовок LSB или нет):

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

(редактировать вопрос с результатами)