init.d脚本在Ubuntu 10.10上工作正常,但不能在11.10上执行LBS标头更正

在Ubuntu 11.10上,如果我运行/ usr / bin / cserver -c /etc/cserver.conf,它会正常工作。

但是,如果我运行服务的cserver启动/etc/init.d/cserver启动,因为我在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 $? 

尽pipe我从来没有在原始服务器上这样做,并且sysv-rc-conf显示它出现在列表中并从正确的级别开始,但是我手动尝试了更新rc.d,并且抱怨了一个无效的lsb头,这导致了我的这个问题和指导 。 所以我改变了上面的标题,以下是它的样子:

 #!/bin/bash # # # chkconfig: 345 99 99 # # description: cserver init # processname: cserver # Source function library. # . /etc/rc.d/init.d/functions 

现在,有关于“源函数库”的那一行,但该目录甚至不存在,并且该行被注释掉了。

我已经检查了旧服务器上的权限和符号链接等,一切似乎相同。

现在有点茫然和困惑 – 也许是一个新鲜,更有知识的眼睛可以在这里发现一些东西? 谢谢。

更新和编辑:感谢kubankczyk – 我去你的build议复制另一个发现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 

不确定是否正确,但至less启动了服务! 谢谢。

你的脚本是为chkconfig编写的(比如在Suse Linux中使用),而不是用于update-rc.d。 现在你可以做的最好的(如果你不想使用chkconfig)就是从你的/etc/init.d中select一些简单的脚本,读取它,理解它,复制它并改变为运行cserver。

具体来说,请validation命令“daemon”是否在脚本中与&符号一起使用。

开始排除最简单的情况。 将OPTIONS暂时改为OPTIONS =“-c /etc/cserver.conf”。 只testing裸脚本(如果这不起作用,无论标头是否为LSB, service cserver start都不起作用):

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

(用结果编辑问题)