Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I built and installed sphinx search on my ubuntu 9.04 server.

How do I make the sphinx daemon start automatically when I reboot?

share|improve this question

10 Answers 10

I don't know Sphinx, but here's the basic approach. Create a file /etc/init.d/searchd with the following contents (there's also this script, but you'll probably need to adjust it a bit):

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

Then execute the following:

$ sudo update-rc.d searchd defaults

To control the service manually:

$ sudo /etc/init.d/searchd <start|stop|restart>
share|improve this answer
    
This script worked perfectly. For the record, here are the start/stop/restart commands that I used. This is on an Ubuntu Hardy server, and I installed sphinx 0.9.8.1-release from source. start /usr/local/bin/searchd stop /usr/local/bin/searchd --stop restart /usr/local/bin/searchd --stop && /usr/local/bin/searchd – Apreche Aug 9 '09 at 12:34
    
Worked like a charm. One word of caution: make sure the searchd file has the proper permissions. – David Oct 8 '12 at 2:52

We deployed Sphinx for a customer on Debian systems, and used Runit to manage the processes. We didn't have to write a special init script, and since we were using Runit on other platforms (CentOS/RHEL mainly) it was perfectly portable.

share|improve this answer

The version of sphinx that is packaged for ubuntu at time of writing (0.99) has the startup script below.

I re-used it for the 2.0.1 beta which I compiled from source, just changing the line DAEMON=/usr/local/.. and it works for 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
share|improve this answer
    
This also worked for me! – ChrisInCambo May 7 '12 at 7:47

I don't really know sphinx, but judging by the online manual, you need to have a startup script to run the daemon. Typically this is done by creating an entry in /etc/init.d and linking it into the appropriate /etc/rcX.d directory. Check the README file in /etc/init.d for details.

If nothing else, something like this is the quick and dirty answer:

$ 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
share|improve this answer

Create a short script file (bash, perhaps) that has the equivalent of the following line in it:

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

Then move the script to /etc/init.d as root, and chmod the script ("chmod +x myscript.sh")

share|improve this answer

Add a restart script to /etc/init.d directory.

share|improve this answer

I would suggest an even simpler solution:

Just add /usr/bin/searchd to /etc/rc.local before the line that says exit 0

share|improve this answer

If you happen to use sphinx in your rails application is a dead easy way to manage this with the whenever gem.

Ryan Bates made a very good screencast about it. This site won't let me put more than one link here but I recommend it.

share|improve this answer

Take a look at this forum post: http://sphinxsearch.com/forum/view.html?id=3568#18044

Basically you can add a cron job that will start Sphinx on reboot by executing this from the command line:

crontab -e

Then add the following:

@reboot searchd --config /path/to/config.conf

share|improve this answer

The new Sphinx versions has init.d script /etc/init.d/searchd Full guide ... Install Sphinx 2.0.4 on CentOS 6.2

share|improve this answer

protected by Sven Mar 16 '12 at 4:16

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?