diff options
Diffstat (limited to 'bin/elasticsearch')
-rwxr-xr-x | bin/elasticsearch | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/bin/elasticsearch b/bin/elasticsearch new file mode 100755 index 0000000..e3eb514 --- /dev/null +++ b/bin/elasticsearch @@ -0,0 +1,214 @@ +#!/bin/sh + +# OPTIONS: +# -d: daemonize, start in the background +# -p <filename>: log the pid to a file (useful to kill it later) + +# CONTROLLING STARTUP: +# +# This script relies on few environment variables to determine startup +# behavior, those variables are: +# +# ES_CLASSPATH -- A Java classpath containing everything necessary to run. +# JAVA_OPTS -- Additional arguments to the JVM for heap size, etc +# ES_JAVA_OPTS -- External Java Opts on top of the defaults set +# +# +# Optionally, exact memory values can be set using the following values, note, +# they can still be set using the `ES_JAVA_OPTS`. Sample format include "512m", and "10g". +# +# ES_HEAP_SIZE -- Sets both the minimum and maximum memory to allocate (recommended) +# +# As a convenience, a fragment of shell is sourced in order to set one or +# more of these variables. This so-called `include' can be placed in a +# number of locations and will be searched for in order. The lowest +# priority search path is the same directory as the startup script, and +# since this is the location of the sample in the project tree, it should +# almost work Out Of The Box. +# +# Any serious use-case though will likely require customization of the +# include. For production installations, it is recommended that you copy +# the sample to one of /usr/share/elasticsearch/elasticsearch.in.sh, +# /usr/local/share/elasticsearch/elasticsearch.in.sh, or +# /opt/elasticsearch/elasticsearch.in.sh and make your modifications there. +# +# Another option is to specify the full path to the include file in the +# environment. For example: +# +# $ ES_INCLUDE=/path/to/in.sh elasticsearch -p /var/run/es.pid +# +# Note: This is particularly handy for running multiple instances on a +# single installation, or for quick tests. +# +# If you would rather configure startup entirely from the environment, you +# can disable the include by exporting an empty ES_INCLUDE, or by +# ensuring that no include files exist in the aforementioned search list. +# Be aware that you will be entirely responsible for populating the needed +# environment variables. + + +# Maven will replace the project.name with elasticsearch below. If that +# hasn't been done, we assume that this is not a packaged version and the +# user has forgotten to run Maven to create a package. +IS_PACKAGED_VERSION='${project.name}' +if [ "$IS_PACKAGED_VERSION" != "elasticsearch" ]; then + cat >&2 << EOF +Error: You must build the project with Maven or download a pre-built package +before you can run Elasticsearch. See 'Building from Source' in README.textile +or visit http://www.elasticsearch.org/download to get a pre-built package. +EOF + exit 1 +fi + +CDPATH="" +SCRIPT="$0" + +# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path. +while [ -h "$SCRIPT" ] ; do + ls=`ls -ld "$SCRIPT"` + # Drop everything prior to -> + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + SCRIPT="$link" + else + SCRIPT=`dirname "$SCRIPT"`/"$link" + fi +done + +# determine elasticsearch home +ES_HOME=`dirname "$SCRIPT"`/.. + +# make ELASTICSEARCH_HOME absolute +ES_HOME=`cd "$ES_HOME"; pwd` + + +# If an include wasn't specified in the environment, then search for one... +if [ "x$ES_INCLUDE" = "x" ]; then + # Locations (in order) to use when searching for an include file. + for include in /usr/share/elasticsearch/elasticsearch.in.sh \ + /usr/local/share/elasticsearch/elasticsearch.in.sh \ + /opt/elasticsearch/elasticsearch.in.sh \ + ~/.elasticsearch.in.sh \ + "`dirname "$0"`"/elasticsearch.in.sh; do + if [ -r "$include" ]; then + . "$include" + break + fi + done +# ...otherwise, source the specified include. +elif [ -r "$ES_INCLUDE" ]; then + . "$ES_INCLUDE" +fi + +if [ -x "$JAVA_HOME/bin/java" ]; then + JAVA="$JAVA_HOME/bin/java" +else + JAVA=`which java` +fi + +if [ ! -x "$JAVA" ]; then + echo "Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME" + exit 1 +fi + +if [ -z "$ES_CLASSPATH" ]; then + echo "You must set the ES_CLASSPATH var" >&2 + exit 1 +fi + +# Special-case path variables. +case `uname` in + CYGWIN*) + ES_CLASSPATH=`cygpath -p -w "$ES_CLASSPATH"` + ES_HOME=`cygpath -p -w "$ES_HOME"` + ;; +esac + +launch_service() +{ + pidpath=$1 + daemonized=$2 + props=$3 + es_parms="-Delasticsearch" + + if [ "x$pidpath" != "x" ]; then + es_parms="$es_parms -Des.pidfile=$pidpath" + fi + + # The es-foreground option will tell Elasticsearch not to close stdout/stderr, but it's up to us not to daemonize. + if [ "x$daemonized" = "x" ]; then + es_parms="$es_parms -Des.foreground=yes" + exec "$JAVA" $JAVA_OPTS $ES_JAVA_OPTS $es_parms -Des.path.home="$ES_HOME" -cp "$ES_CLASSPATH" $props \ + org.elasticsearch.bootstrap.Elasticsearch + # exec without running it in the background, makes it replace this shell, we'll never get here... + # no need to return something + else + # Startup Elasticsearch, background it, and write the pid. + exec "$JAVA" $JAVA_OPTS $ES_JAVA_OPTS $es_parms -Des.path.home="$ES_HOME" -cp "$ES_CLASSPATH" $props \ + org.elasticsearch.bootstrap.Elasticsearch <&- & + return $? + fi +} + +# Parse any long getopt options and put them into properties before calling getopt below +# Be dash compatible to make sure running under ubuntu works +ARGV="" +while [ $# -gt 0 ] +do + case $1 in + --*=*) properties="$properties -Des.${1#--}" + shift 1 + ;; + --*) properties="$properties -Des.${1#--}=$2" + shift 2 + ;; + *) ARGV="$ARGV $1" ; shift + esac +done + +# Parse any command line options. +args=`getopt vdhp:D:X: $ARGV` +eval set -- "$args" + +while true; do + case $1 in + -v) + "$JAVA" $JAVA_OPTS $ES_JAVA_OPTS $es_parms -Des.path.home="$ES_HOME" -cp "$ES_CLASSPATH" $props \ + org.elasticsearch.Version + exit 0 + ;; + -p) + pidfile="$2" + shift 2 + ;; + -d) + daemonized="yes" + shift + ;; + -h) + echo "Usage: $0 [-d] [-h] [-p pidfile]" + exit 0 + ;; + -D) + properties="$properties -D$2" + shift 2 + ;; + -X) + properties="$properties -X$2" + shift 2 + ;; + --) + shift + break + ;; + *) + echo "Error parsing argument $1!" >&2 + exit 1 + ;; + esac +done + +# Start up the service +launch_service "$pidfile" "$daemonized" "$properties" + +exit $? |