기본 시작에는 런레벨이 포함되지 않습니다.

기본 시작에는 런레벨이 포함되지 않습니다.

시작 시 및 호출 시 사용자 지정 데몬을 실행하려고 합니다. update-rc.d ydcd enable

오류가 발생했습니다.

update-rc.d: using dependency based boot sequencing
update-rc.d: error: MyDaemon Default-Start contains no runlevels, aborting.

저는 Debian wheezy를 실행 중이고 초기화는 SysVinit입니다.

구글링해도 귀중한 정보가 없어서 최후의 수단으로 여기까지 왔습니다.

여기서 무슨 일이 일어나고 있는 걸까요? init.d 스크립트가 작동하려면 무엇을 변경해야 합니까?

편집하다:

스크립트는 다음과 같습니다.

#!/bin/bash
#
#ydcd.daemon
#
# chkconfig: 2345 85 15
# description: MyServiceName
# processname: MyServiceName
# source function library

. /lib/lsb/init-functions

RETVAL=0
NAME=ydcd.daemon
# YOU CAN SET ANY PATH BUT IS RECOMENDED TO USE THE DISTRO'S STANDARD ONE.
DAEMON=/home/debian/yd_cd/$NAME
prog=$(basename $DAEMON)
lockfile=/var/lock/$NAM

SVC_FILE=$DAEMON
start() {
    if [ -f $SVC_FILE ]; then
      #reset
      echo -n "Starting "$SVC_FILE": "
      RETVALS=$(start-stop-daemon -S -b -x $SVC_FILE -- -r)

          Count=${#RETVALS[@]}
      RETVAL="[FAIL]"

          if [ $Count -eq 0 ]; then
        RETVAL="[OK]"
      elif [ $Count -eq 1 ]; then
        if [ ${#RETVALS[0]} -eq 0 ]; then
          RETVAL="[OK]"
        else
          iStart=${#SVC_FILE}
          iLength=${#RETVALS[0]}
          Response=${RETVALS[0]:(iStart+1):7}
          RETVAL=$Response
          if [ "$Response" == "already" ]; then
            RETVAL="[OK]"
          fi
        fi
      fi
      echo $RETVAL
          return 0
    else
      echo $SVC_ALIAS" not installed" $SVC_DIR
      exit 2;
    fi
}

stop() {
    echo -n "Shutting down "$SVC_FILE":"
    RETVALS=$(start-stop-daemon -K -x $SVC_FILE -- s)
    #additional PROCKILLS=$(killall -w -q -e $SVC_PROCESS_NAME $SVC_FILENAME)
    Count=${#RETVALS[@]}
    Index=0
    RETVAL="[FAIL]"
    if [ $Count -eq 1 ]; then
        if [ ${#RETVALS[0]} -eq 0 ]; then
            RETVAL="[OK]"
        else
            Response=${RETVALS[0]:0:2}
            RETVAL=$Response
            if [ "$Response" == "No" ]; then
                RETVAL="[OK]"
            fi
        fi
    else
        RETVAL="[OK]"
    fi

    echo $RETVAL
        return 0
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status $SVC_SERVICE_SCRIPT
        ;;
    restart)
        stop
        start
        ;;
    *)
    echo $SVC_ALIAS" [Invalid Startup Parameters]"
    echo "Usage:  {start|stop|status|restart}"
        exit 1
        ;;
esac
exit $?

답변1

데비안은 이제 기본적으로 systemd를 사용하며 "런레벨"이 없습니다. 당신이 사용한 것과 같은 오래된 명령~해야 한다일, "일"이라는 어떤 가치를 위해.

답변2

chkconfig스크립트의 시작 부분에 이전 스타일의 주석 블록이 있습니다.

SysVinit을 사용하더라도 최신 init 스크립트 관리 시스템은 종속성 기반입니다. 즉, 서비스가 의존하는 다른 서비스가 무엇인지 알려줘야 합니다. 이를 위해서는 아래 설명된 대로 업데이트된 스타일 LSB 호환 주석 블록이 필요합니다 man 5 init-d-script.

### BEGIN INIT INFO
# Provides:          ydcd.daemon
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs $remote_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: brief one-line description
# Description:       A more verbose description of your service
#                    possibly on multiple lines.
### END INIT INFO

이를 통해 시작 스크립트의 자동 순서 지정이 가능하며, 종속성이 허용되는 경우 시스템이 여러 시작 스크립트를 병렬로 실행할 수도 있습니다. 이는 시스템 시작 프로세스 속도를 크게 높일 수 있는 잠재력을 가지고 있습니다. 진정한 종속성 기반 초기화 시스템으로 전환하는 것만큼 빠르지는 않지만 사소하지는 않습니다.

관련 정보