如何调查运行级别初始化?

如何调查运行级别初始化?

我正在调查为什么服务(solr)在服务器启动时没有启动(在本例中是一个运行 ubuntu 12.04 的 vagrant box)。

如果我运行 /etc/init.d/solr start,脚本就会运行

我运行 sudo update-rc.d solr defaults 但是它在启动后没有运行,我现在不知道如何调查。

我的调试选项有哪些?

剧本:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          solr
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Starts solr
# Description:       Starts solr using start-stop-daemon
### END INIT INFO

SOLR_HOME=/vagrant/solr/jetty
DAEMON=/usr/bin/java
DAEMON_OPTS='-jar start.jar'
NAME=Solr
DESC=Solr
PID_FILE=/vagrant/solr/jetty/$NAME.pid
SOLR_USER=vagrant
SOLR_GROUP=vagrant

test -x $DAEMON || exit 1

set -e

. /lib/lsb/init-functions

case "$1" in
  start)
    echo -n "Starting $DESC: "
    if start-stop-daemon -d $SOLR_HOME --start -b -m --pidfile $PID_FILE --user $SOLR_USER --group $SOLR_GROUP --chuid $SOLR_USER --startas $DAEMON -- $DAEMON_OPTS
    then
        echo "solr started" >> /var/log/messages
        exit 0
    else
    echo "solr start failed" >> /var/log/messages
        exit 1
    fi
    ;;
  stop)
    echo -n "Stopping $DESC: "
    if start-stop-daemon --stop --pidfile $PID_FILE
    then
        echo "stopped."
        exit 0
    else
        echo "failed."
        exit 1
    fi
    ;;
  restart|force-reload)
    ${0} stop
    sleep 0.5
    ${0} start
    ;;
  status)
    status_of_proc -p $PID_FILE "$DAEMON" solr && exit 0 || exit $?
    ;;
  *)
    N=/etc/init.d/$NAME
    echo "Usage: $N {start|stop|restart|force-reload}" >&2
    exit 1
    ;;
esac

exit 0

/var/log/messages 中的输出是(两次!)solr started...

答案1

解决这个问题的方法有很多种,但是我认为它们最终都会归结为同一件事。

执行此操作的“原始/裸机”方式 - 查看 /etc(最好以 root 身份),您将发现多个目录 rcX.d 以及目录“init.d”。

如果您查看 rcX.d 目录之一,您将看到它充满了与 /etc/init.d/filename 符号链接的文件。文件开头的“S”表示“开始”。后面的数字表示文件应按何种顺序运行。

当操作系统启动/更改运行级别时,它会运行该运行级别的所有文件,即对于运行级别 2,它将运行 /etc/rc2.d/S* - 如果文件未符号链接,则在运行级别启动时它不会启动。要检查当前运行级别,您可以键入“runlevel”,它将返回当前正在运行的运行级别。

您可能对运行级别 2-5 感兴趣 - 您可以找到运行级别列表这里

如果您想将程序添加到适当的运行级别,只需创建适当的符号链接即可。不过,我更喜欢安装“chkconfig”。我不知道这是否是 Redhat 脚本的一个版本(语法不兼容,但非常接近) - 但此命令将允许您查看和更改在运行级别上运行的程序。

chkconfig -l 将显示所有程序及其运行级别,而 chkconfig -l progname 将显示为给定程序启用的运行级别。

要使程序在特定的运行级别(或多个运行级别)下运行,您可以使用 chkconfig progname 运行级别,例如 chkconfig sshd 2345 将确保在您进入运行级别 2、3、4 或 5 时 sshd 运行。

答案2

问题是,在启动 init.d 脚本时,/vagrant/它不可用/未安装,但您依赖它存在于您的脚本中。

http://razius.com/articles/launching-services-after-vagrant-mount/以获得一些指点。

相关内容