我正在调查为什么服务(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/以获得一些指点。