¿Cómo hago para que reinicie sphinx cuando reinicio mi servidor Ubuntu?


12

Construí e instalé sphinx search en mi servidor ubuntu 9.04.

¿Cómo hago para que el demonio sphinx se inicie automáticamente cuando reinicio?

Respuestas:


13

No sé Sphinx, pero este es el enfoque básico. Cree un archivo /etc/init.d/searchd con los siguientes contenidos (también existe este script , pero probablemente necesite ajustarlo un poco):

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

Luego ejecute lo siguiente:

$ sudo update-rc.d searchd defaults

Para controlar el servicio manualmente:

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

Este guión funcionó perfectamente. Para el registro, aquí están los comandos de inicio / detención / reinicio que utilicé. Esto está en un servidor Ubuntu Hardy, e instalé sphinx 0.9.8.1-release desde la fuente. start / usr / local / bin / searchd stop / usr / local / bin / searchd --stop restart / usr / local / bin / searchd --stop && / usr / local / bin / searchd
Apreche el

Trabajado como un encanto. Una palabra de precaución: asegúrese de que el archivo buscado tenga los permisos adecuados.
David

1

Implementamos Sphinx para un cliente en sistemas Debian y utilizamos Runit para administrar los procesos. No tuvimos que escribir un script de inicio especial, y dado que estábamos usando Runit en otras plataformas (CentOS / RHEL principalmente), era perfectamente portátil.


1

La versión de sphinx que está empaquetada para ubuntu al momento de escribir (0.99) tiene el script de inicio a continuación.

Lo volví a usar para la versión 2.0.1 beta que compilé desde la fuente, solo cambié la línea DAEMON=/usr/local/..y funciona para mí.

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

¡Esto también funcionó para mí!
ChrisInCambo

0

Realmente no sé sphinx, pero a juzgar por el manual en línea, necesitas tener un script de inicio para ejecutar el demonio. Normalmente, esto se hace creando una entrada en /etc/init.d y vinculándola al directorio /etc/rcX.d apropiado. Consulte el archivo README en /etc/init.d para obtener más detalles.

Por lo menos, algo como esto es la respuesta rápida y sucia:

$ 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

Cree un archivo de script corto (bash, tal vez) que tenga el equivalente de la siguiente línea:

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

Luego mueva el script a /etc/init.d como root y chmod el script ("chmod + x myscript.sh")


0

Agregue un script de reinicio al directorio /etc/init.d.


0

Sugeriría una solución aún más simple:

Simplemente agregue / usr / bin / searchd a /etc/rc.local antes de la línea que dice la salida 0


0

Si usa esfinge en su aplicación de rieles, es una manera fácil de manejar esto con la gema de siempre .

Ryan Bates hizo un muy buen screencast al respecto. Este sitio no me permite poner más de un enlace aquí, pero lo recomiendo.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.