Subversion

init.d 腳本手動啟動,但不是通過服務命令或啟動時啟動

  • November 4, 2014

我有一個 subversion init.d 腳本,如果我啟動它可以手動啟動它

$ sudo /etc/init.d/subversion start

我得到這個回應:

$ Starting Subversion Daemon (svnserve):                     [  OK  ]

但是,如果我通過添加腳本

$ sudo /sbin/chkconfig --add subversion

然後執行:

$ /sbin/service subversion start

我得到這個回應:

$ Starting Subversion Daemon (svnserve): /etc/init.d/subversion: Usage: daemon [+/-nicelevel] {program}

有沒有人見過這個?腳本上的權限是 +x。下面的 init.d 腳本:

/etc/init.d/subversion:

   #!/bin/bash
   #
   #   /etc/init.d/subversion
   #
   # Starts the Subversion Daemon
   #
   # chkconfig: 2345 90 10
   # description: Subversion Daemon


   # copied from http://www.svnforum.org/threads/31170-init.d-script-for-fedora-redhat


   # processname: svnserve

   source /etc/rc.d/init.d/functions

   [ -x /usr/bin/svnserve ] || exit 1

   ### Default variables
   SYSCONFIG="/etc/sysconfig/subversion"

   ### Read configuration
   [ -r "$SYSCONFIG" ] && source "$SYSCONFIG"

   RETVAL=0
   prog="svnserve"
   desc="Subversion Daemon"

   start() {
       echo -n $"Starting $desc ($prog): "
           daemon --user $USER $prog -d $OPTIONS
           RETVAL=$?
           [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
           echo
   }

   stop() {
           echo -n $"Shutting down $desc ($prog): "
           killproc $prog
           RETVAL=$?
           [ $RETVAL -eq 0 ] && success || failure
           echo
       [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
           return $RETVAL
   }


   case "$1" in
     start)
           start
       ;;
     stop)
           stop
       ;;
     restart)
       stop
       start
       RETVAL=$?
           ;;
     condrestart)
       [ -e /var/lock/subsys/$prog ] && restart
           RETVAL=$?
           ;;
     *)
           echo $"Usage: $0 {start|stop|restart|condrestart}"
           RETVAL=1
   esac

   exit $RETVAL

/etc/sysconfig/subversion:

OPTIONS="-r /data/repository/"

這是您在 init 腳本中使用的守護程序命令的問題。

$USER設置變數,因此在將參數傳遞給守護程序函式時:

       --user)
              user=$2
              shift 2
              ;;

svnserve參數被用於user=$2,因此-d由函式解析:

       *)     echo $"$0: Usage: daemon [+/-nicelevel] {program}"
              return 1;;

USER所以要麼在腳本中硬編碼變數,要麼--user $USERdaemon參數中刪除。

此外,您應該硬編碼$prog變數的路徑:

prog=/usr/bin/svnserve

引用自:https://unix.stackexchange.com/questions/165758