当我重新启动Ubuntu服务器时,如何让sphinx重新启动?

我在我的ubuntu 9.04服务器上构build并安装了sphinxsearch。

当我重新启动时,如何让狮身人面像守护进程自动启动?

我不知道狮身人面像,但这是基本的方法。 用下面的内容创build一个文件/etc/init.d/searchd (还有这个脚本 ,但是你可能需要调整一下):

#!/bin/bash case "${1:-''}" in 'start') # put the command to start sphinx # ie, /usr/bin/searchd start or /usr/bin/searchd --daemon or whatever the command is ;; 'stop') # stop command here ;; 'restart') # restart command here ;; *) echo "Usage: $SELF start|stop|restart" exit 1 ;; esac 

然后执行以下操作:

 $ sudo update-rc.d searchd defaults 

要手动控制服务:

 $ sudo /etc/init.d/searchd <start|stop|restart> 

我们在Debian系统上为客户部署了Sphinx,并使用Runit来pipe理这些stream程。 我们不必写一个特殊的初始化脚本,因为我们在其他平台(主要是CentOS / RHEL)上使用Runit,所以它非常便携。

在写作时为ubuntu打包的sphinx版本(0.99)具有下面的启动脚本。

我重新使用它的2.0.1testing版,我从源代码编译,只是改变行DAEMON=/usr/local/..它适用于我。

 #! /bin/sh # # Written by Miquel van Smoorenburg <[email protected]>. # Modified for Debian # by Ian Murdock <[email protected]>. # Further changes by Javier Fernandez-Sanguino <[email protected]> # Modified for sphinx by Radu Spineanu <[email protected]> # # ### BEGIN INIT INFO # Provides: sphinxsearch # Required-Start: $local_fs $remote_fs $syslog $network $time # Required-Stop: $local_fs $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Fast standalone full-text SQL search engine ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/local/sphinx/bin/searchd NAME=sphinxsearch DESC=sphinxsearch test -x $DAEMON || exit 0 LOGDIR=/var/log/sphinxsearch PIDFILE=/var/run/searchd.pid DODTIME=1 # Time to wait for the server to die, in seconds # If this value is set too low you might not # let some servers to die gracefully and # 'restart' will not work # Include sphinxsearch defaults if available if [ -f /etc/default/sphinxsearch ] ; then . /etc/default/sphinxsearch fi if [ "$START" != "yes" ]; then echo "To enable $NAME, edit /etc/default/sphinxsearch and set START=yes" exit 0 fi set -e running_pid() { # Check if a given process pid's cmdline matches a given name pid=$1 name=$2 [ -z "$pid" ] && return 1 [ ! -d /proc/$pid ] && return 1 cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1` # Is this the expected child? [ "$cmd" != "$name" ] && return 1 return 0 } running() { # Check if the process is running looking at /proc # (works for all users) # No pidfile, probably no daemon present [ ! -f "$PIDFILE" ] && return 1 # Obtain the pid and check it against the binary name pid=`cat $PIDFILE` running_pid $pid $DAEMON || return 1 return 0 } force_stop() { # Forcefully kill the process [ ! -f "$PIDFILE" ] && return if running ; then kill -15 $pid # Is it really dead? [ -n "$DODTIME" ] && sleep "$DODTIME"s if running ; then kill -9 $pid [ -n "$DODTIME" ] && sleep "$DODTIME"s if running ; then echo "Cannot kill $LABEL (pid=$pid)!" exit 1 fi fi fi rm -f $PIDFILE return 0 } case "$1" in start) echo -n "Starting $DESC: " # Check if we have the configuration file if [ ! -f /etc/sphinxsearch/sphinx.conf ]; then echo "Please create an /etc/sphinxsearch/sphinx.conf configuration file." echo "Templates are in the /etc/sphinxsearch/ directory." exit 0 fi start-stop-daemon --start --exec ${DAEMON} if running ; then echo "$NAME." else echo " ERROR." fi ;; stop) echo -n "Stopping $DESC: " start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE \ --exec $DAEMON echo "$NAME." ;; force-stop) echo -n "Forcefully stopping $DESC: " force_stop if ! running ; then echo "$NAME." else echo " ERROR." fi ;; restart) echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE \ --exec $DAEMON [ -n "$DODTIME" ] && sleep $DODTIME start-stop-daemon --start --exec ${DAEMON} echo "$NAME." ;; status) echo -n "$LABEL is " if running ; then echo "running" else echo " not running." exit 1 fi ;; *) N=/etc/init.d/$NAME # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $N {start|stop|restart|force-reload|status|force-stop}" >&2 exit 1 ;; esac exit 0 

我不太了解狮身人面像,但是通过在线手册来判断,你需要有一个启动脚本来运行守护进程。 通常,这是通过在/etc/init.d中创build一个条目并将其链接到适当的/etc/rcX.d目录中来完成的。 有关详细信息,请查阅/etc/init.d中的README文件。

如果没有别的,像这样的东西是快速和肮脏的答案:

 $ cat > /etc/init.d/sphinx cd /usr/local/sphinx/etc /usr/local/sphinx/bin/searchd ^D $ ln -s /etc/init.d/sphinx /etc/init.d/rc3.d/S99sphinx 

创build一个简短的脚本文件(可能是bash),它具有与其中相同的以下行:

/ path / to / sphinx / installation / searchd –config /path/to/sphinx/config/sphinx.conf&

然后将脚本移动到/etc/init.d作为root,然后chmod脚本(“chmod + x myscript.sh”)

将重新启动脚本添加到/etc/init.d目录。

我会build议一个更简单的解决scheme:

只要将/ usr / bin / searchd添加到/etc/rc.local之前,表示出口0即可

如果您碰巧在您的Rails应用程序中使用sphinx,那么使用gem来pipe理这个应用程序是非常简单的方法。

瑞安·贝茨(Ryan Bates)对此做了一个非常好的video。 这个网站不会让我把多个链接放在这里,但我推荐它。

看看这个论坛post: http : //sphinxsearch.com/forum/view.html?id=3568#18044

基本上你可以添加一个cron作业,通过在命令行中执行这个命令来启动Sphinx。

crontab -e

然后添加以下内容:

@reboot searchd –config /path/to/config.conf