Bagaimana cara membuat sphinx restart ketika saya reboot server Ubuntu saya?


12

Saya membuat dan menginstal pencarian sphinx di server ubuntu 9.04 saya.

Bagaimana cara membuat daemon sphinx mulai secara otomatis ketika saya reboot?

Jawaban:


13

Saya tidak tahu Sphinx, tapi inilah pendekatan dasarnya. Buat file /etc/init.d/searchd dengan konten berikut (ada juga skrip ini , tetapi Anda mungkin perlu sedikit menyesuaikannya):

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

Kemudian jalankan hal berikut:

$ sudo update-rc.d searchd defaults

Untuk mengontrol layanan secara manual:

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

Script ini bekerja dengan sempurna. Sebagai catatan, berikut adalah perintah start / stop / restart yang saya gunakan. Ini ada di server Hardy Ubuntu, dan saya menginstal sphinx 0.9.8.1-release dari source. start / usr / local / bin / searchd berhenti / usr / local / bin / searchd - stop restart / usr / local / bin / searchd --stop && / usr / local / bin / searchd
Apreche

Bekerja seperti pesona. Satu kata peringatan: pastikan file searchd memiliki izin yang tepat.
David

1

Kami menggunakan Sphinx untuk pelanggan pada sistem Debian, dan menggunakan Runit untuk mengelola proses. Kami tidak harus menulis skrip init khusus, dan karena kami menggunakan Runit pada platform lain (terutama CentOS / RHEL), itu sangat portabel.


1

Versi sphinx yang dikemas untuk ubuntu pada saat penulisan (0.99) memiliki skrip startup di bawah ini.

Saya menggunakannya kembali untuk 2.0.1 beta yang saya kompilasi dari sumber, hanya mengubah baris DAEMON=/usr/local/..dan berfungsi untuk saya.

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

Ini juga bekerja untuk saya!
ChrisInCambo

0

Saya tidak benar-benar tahu sphinx, tetapi menilai dari manual online, Anda harus memiliki skrip startup untuk menjalankan daemon. Biasanya ini dilakukan dengan membuat entri di /etc/init.d dan menautkannya ke direktori /etc/rcX.d yang sesuai. Periksa file README di /etc/init.d untuk detailnya.

Jika tidak ada yang lain, sesuatu seperti ini adalah jawaban cepat dan kotor:

$ 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

Buat file skrip pendek (bash, mungkin) yang setara dengan baris berikut di dalamnya:

/ path / ke / sphinx / instalasi / searchd --config /path/to/sphinx/config/sphinx.conf &

Kemudian pindahkan skrip ke /etc/init.d sebagai root, dan chmod skrip ("chmod + x myscript.sh")


0

Tambahkan skrip restart ke direktori /etc/init.d.


0

Saya akan menyarankan solusi yang lebih sederhana:

Cukup tambahkan / usr / bin / searchd ke /etc/rc.local sebelum baris yang bertuliskan exit 0


0

Jika Anda menggunakan sphinx di aplikasi rel Anda adalah cara mudah mati untuk mengelola ini dengan permata kapanpun .

Ryan Bates membuat screencast yang sangat baik tentang hal itu. Situs ini tidak akan membiarkan saya menaruh lebih dari satu tautan di sini, tetapi saya merekomendasikannya.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.