Antworten:
Ich kenne Sphinx nicht, aber hier ist der grundlegende Ansatz. Erstellen Sie eine Datei /etc/init.d/searchd mit dem folgenden Inhalt (es gibt auch dieses Skript , aber Sie müssen es wahrscheinlich etwas anpassen):
#!/bin/bash
case "${1:-''}" in
'start')
# put the command to start sphinx
# i.e., /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
Führen Sie dann Folgendes aus:
$ sudo update-rc.d searchd defaults
So steuern Sie den Dienst manuell:
$ sudo /etc/init.d/searchd <start|stop|restart>
Wir haben Sphinx für einen Kunden auf Debian-Systemen bereitgestellt und Runit zum Verwalten der Prozesse verwendet. Wir mussten kein spezielles Init-Skript schreiben und da wir Runit auf anderen Plattformen (hauptsächlich CentOS / RHEL) verwendeten, war es perfekt portierbar.
Die zum Zeitpunkt des Schreibens für Ubuntu gepackte Version von Sphinx (0.99) enthält das folgende Startskript.
Ich habe es für die Beta 2.0.1, die ich aus dem Quellcode kompiliert habe, erneut verwendet. Ich habe nur die Zeile geändert DAEMON=/usr/local/..
und es funktioniert für mich.
#! /bin/sh
#
# Written by Miquel van Smoorenburg <miquels@cistron.nl>.
# Modified for Debian
# by Ian Murdock <imurdock@gnu.ai.mit.edu>.
# Further changes by Javier Fernandez-Sanguino <jfs@debian.org>
# Modified for sphinx by Radu Spineanu <radu@debian.org>
#
#
### 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
Ich kenne Sphinx nicht wirklich, aber nach dem Online-Handbuch benötigen Sie ein Startskript, um den Daemon auszuführen. In der Regel wird dazu ein Eintrag in /etc/init.d erstellt und mit dem entsprechenden Verzeichnis /etc/rcX.d verknüpft. Weitere Informationen finden Sie in der README-Datei in /etc/init.d.
Wenn nichts anderes, ist so etwas die schnelle und schmutzige Antwort:
$ 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
Erstellen Sie eine kurze Skriptdatei (Bash, vielleicht), die das Äquivalent der folgenden Zeile enthält:
/ path / to / sphinx / installation / searchd --config /path/to/sphinx/config/sphinx.conf &
Verschieben Sie das Skript als root nach /etc/init.d und chmod das Skript ("chmod + x myscript.sh")
Wenn Sie zufällig Sphinx in Ihrer Rails-Anwendung verwenden, ist dies mit dem when gem ein Kinderspiel .
Ryan Bates hat einen sehr guten Screencast darüber gemacht. Auf dieser Site kann ich nicht mehr als einen Link einfügen, aber ich empfehle es.
Schauen Sie sich diesen Forumsbeitrag an: http://sphinxsearch.com/forum/view.html?id=3568#18044
Grundsätzlich können Sie einen Cron-Job hinzufügen, der Sphinx beim Neustart startet, indem Sie diesen über die Befehlszeile ausführen:
crontab -e
Fügen Sie dann Folgendes hinzu:
@reboot searchd --config /path/to/config.conf