mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-06 13:08:29 +00:00
5fdb35fc54
Because the NetworkExceptionHelper class relies on the english language in order to extract information and decide whether a certain exception is a network problem, we need to set the english locale on startup in order to prevent other locales to circumvent this check.
220 lines
6.8 KiB
Bash
Executable File
220 lines
6.8 KiB
Bash
Executable File
#!/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
|
|
|
|
# Make sure we dont use any predefined locale, as we check some exception message strings and rely on english language
|
|
# As those strings are created by the OS, they are dependant on the configured locale
|
|
LANG=en_US.UTF-8
|
|
LC_ALL=en_US.UTF-8
|
|
|
|
# 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 $?
|