Come faccio a riavviare sphinx quando riavvio il mio server Ubuntu?


12

Ho creato e installato la ricerca Sfinge sul mio server Ubuntu 9.04.

Come faccio a far avviare automaticamente il demone sfinge al riavvio?

Risposte:


13

Non conosco la Sfinge, ma ecco l'approccio di base. Crea un file /etc/init.d/searchd con i seguenti contenuti (c'è anche questo script , ma probabilmente dovrai modificarlo un po '):

#!/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

Quindi eseguire quanto segue:

$ sudo update-rc.d searchd defaults

Per controllare il servizio manualmente:

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

Questa sceneggiatura ha funzionato perfettamente. Per la cronaca, ecco i comandi di avvio / arresto / riavvio che ho usato. Questo è su un server Ubuntu Hardy e ho installato sphinx 0.9.8.1-release dalla fonte. start / usr / local / bin / searchd stop / usr / local / bin / searchd --stop restart / usr / local / bin / searchd --stop && / usr / local / bin / searchd
Apreche

Ha funzionato come un fascino. Un avvertimento: assicurati che il file searchd disponga delle autorizzazioni appropriate.
David,

1

Abbiamo distribuito Sphinx per un cliente su sistemi Debian e abbiamo usato Runit per gestire i processi. Non abbiamo dovuto scrivere uno script di init speciale e poiché stavamo usando Runit su altre piattaforme (principalmente CentOS / RHEL) era perfettamente portatile.


1

La versione di sfinge che è pacchettizzata per Ubuntu al momento della scrittura (0,99) ha lo script di avvio di seguito.

L'ho riutilizzato per la beta 2.0.1 che ho compilato dal sorgente, cambiando semplicemente la linea DAEMON=/usr/local/..e funziona per me.

#! /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

Questo ha funzionato anche per me!
ChrisInCambo,

0

Non conosco davvero la sfinge, ma a giudicare dal manuale online, è necessario disporre di uno script di avvio per eseguire il demone. In genere ciò avviene creando una voce in /etc/init.d e collegandola alla directory /etc/rcX.d appropriata. Controlla il file README in /etc/init.d per i dettagli.

Se non altro, qualcosa del genere è la risposta rapida e sporca:

$ 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

Crea un breve file di script (bash, forse) che contenga l'equivalente della seguente riga:

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

Quindi sposta lo script in /etc/init.d come root e chmod lo script ("chmod + x myscript.sh")


0

Aggiungi uno script di riavvio alla directory /etc/init.d.


0

Suggerirei una soluzione ancora più semplice:

Basta aggiungere / usr / bin / searchd a /etc/rc.local prima della riga che dice exit 0


0

Se ti capita di usare la sfinge nell'applicazione delle rotaie è un modo estremamente semplice per gestirlo con la gemma quando vuoi .

Ryan Bates ha realizzato un ottimo screencast al riguardo. Questo sito non mi consente di inserire più di un link qui, ma lo consiglio.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.