Làm cách nào để tôi khởi động lại nhân sư khi tôi khởi động lại máy chủ Ubuntu của mình?


12

Tôi đã xây dựng và cài đặt tìm kiếm nhân sư trên máy chủ ub Ubuntu 9.04 của mình.

Làm cách nào để làm daemon nhân sư tự động khởi động khi tôi khởi động lại?

Câu trả lời:


13

Tôi không biết Nhân sư, nhưng đây là cách tiếp cận cơ bản. Tạo một tệp /etc/init.d/searchd với các nội dung sau (cũng có tập lệnh này , nhưng có lẽ bạn sẽ cần điều chỉnh nó một chút):

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

Sau đó thực hiện như sau:

$ sudo update-rc.d searchd defaults

Để kiểm soát dịch vụ theo cách thủ công:

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

Kịch bản này đã làm việc hoàn hảo. Đối với bản ghi, đây là các lệnh start / stop / restart mà tôi đã sử dụng. Đây là trên một máy chủ Ubuntu Hardy và tôi đã cài đặt bản phát hành nhân sư 0.9.8.1 từ nguồn. start / usr / local / bin / searchd stop / usr / local / bin / searchd --stop restart / usr / local / bin / searchd --stop && / usr / local / bin / searchd
Apreche

Làm việc như người ở. Một lời cảnh báo: đảm bảo tệp searchd có quyền thích hợp.
David

1

Chúng tôi đã triển khai Sphinx cho một khách hàng trên các hệ thống Debian và sử dụng Runit để quản lý các quy trình. Chúng tôi đã không phải viết một tập lệnh init đặc biệt và vì chúng tôi đang sử dụng Runit trên các nền tảng khác (chủ yếu là CentOS / RHEL) nên nó hoàn toàn di động.


1

Phiên bản nhân sư được đóng gói cho Ubuntu tại thời điểm viết (0,99) có tập lệnh khởi động bên dưới.

Tôi đã sử dụng lại nó cho phiên bản 2.0.1 beta mà tôi đã biên dịch từ nguồn, chỉ cần thay đổi dòng DAEMON=/usr/local/..và nó hoạt động với tôi.

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

Điều này cũng làm việc cho tôi!
ChrisInCambo

0

Tôi thực sự không biết nhân sư, nhưng đánh giá bằng hướng dẫn trực tuyến, bạn cần có một kịch bản khởi động để chạy daemon. Thông thường, điều này được thực hiện bằng cách tạo một mục trong /etc/init.d và liên kết nó vào thư mục /etc/rcX.d thích hợp. Kiểm tra tệp README trong /etc/init.d để biết chi tiết.

Nếu không có gì khác, một cái gì đó như thế này là câu trả lời nhanh chóng và bẩn thỉu:

$ 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

Tạo một tệp script ngắn (bash, có lẽ) có dòng tương đương với dòng sau:

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

Sau đó di chuyển tập lệnh sang /etc/init.d làm root và chmod tập lệnh ("chmod + x myscript.sh")


0

Thêm một kịch bản khởi động lại vào thư mục /etc/init.d.


0

Tôi muốn đề xuất một giải pháp thậm chí đơn giản hơn:

Chỉ cần thêm / usr / bin / searchd vào /etc/rc.local trước dòng có thông báo thoát 0


0

Nếu bạn tình cờ sử dụng nhân sư trong ứng dụng rails của mình là một cách dễ dàng để quản lý điều này với viên ngọc bất cứ khi nào .

Ryan Bates đã thực hiện một screencast rất tốt về nó. Trang web này sẽ không cho phép tôi đặt nhiều hơn một liên kết ở đây nhưng tôi khuyên bạn nên sử dụng nó.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.