Wie starte ich Sphinx neu, wenn ich meinen Ubuntu-Server neu starte?


12

Ich habe Sphinx Search auf meinem Ubuntu 9.04 Server installiert.

Wie starte ich den Sphinx-Daemon automatisch, wenn ich neu starte?

Antworten:


13

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>

Dieses Skript hat perfekt funktioniert. Für die Aufzeichnung sind hier die Start- / Stopp- / Neustartbefehle, die ich verwendet habe. Dies ist auf einem Ubuntu Hardy-Server, und ich habe Sphinx 0.9.8.1-Release von der Quelle installiert. start / usr / local / bin / searchd stop / usr / local / bin / searchd - Neustart stoppen / usr / local / bin / searchd - Stopp && / usr / local / bin / searchd
Apreche

Lief wie am Schnürchen. Ein Wort zur Vorsicht: Stellen Sie sicher, dass die durchsuchte Datei über die richtigen Berechtigungen verfügt.
David

1

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.


1

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

Das hat auch bei mir geklappt!
ChrisInCambo

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

0

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")


0

Fügen Sie ein Neustart-Skript zum Verzeichnis /etc/init.d hinzu.


0

Ich würde eine noch einfachere Lösung vorschlagen:

Fügen Sie einfach / usr / bin / searchd zu /etc/rc.local vor der Zeile mit der Aufschrift exit 0 hinzu


0

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.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.