Jawaban:
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>
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.
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
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
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.
Lihatlah posting forum ini: http://sphinxsearch.com/forum/view.html?id=3568#18044
Pada dasarnya Anda dapat menambahkan tugas cron yang akan memulai Sphinx saat reboot dengan menjalankan ini dari baris perintah:
crontab -e
Kemudian tambahkan yang berikut ini:
@reboot searchd --config /path/to/config.conf