123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- #!/bin/sh
- # OPTIONS:
- # -d daemonize (run in background)
- # -p pidfile write PID to <pidfile>
- # -h
- # --help print command line options
- # -v print elasticsearch version, then exit
- # -D prop set JAVA system property
- # -X prop set non-standard JAVA system property
- # --prop=val
- # --prop val set elasticsearch property (i.e. -Des.<prop>=<val>)
- # 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 \
- "$ES_HOME/bin/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
- export HOSTNAME=`hostname -s`
- # 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"
- eval 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.
- eval exec "$JAVA" $JAVA_OPTS $ES_JAVA_OPTS $es_parms "\"-Des.path.home=$ES_HOME\"" -cp "\"$ES_CLASSPATH\"" $props \
- org.elasticsearch.bootstrap.Elasticsearch <&- &
- return $?
- fi
- }
- # Print command line usage / help
- usage() {
- echo "Usage: $0 [-vdh] [-p pidfile] [-D prop] [-X prop]"
- echo "Start elasticsearch."
- echo " -d daemonize (run in background)"
- echo " -p pidfile write PID to <pidfile>"
- echo " -h"
- echo " --help print command line options"
- echo " -v print elasticsearch version, then exit"
- echo " -D prop set JAVA system property"
- echo " -X prop set non-standard JAVA system property"
- echo " --prop=val"
- echo " --prop val set elasticsearch property (i.e. -Des.<prop>=<val>)"
- }
- # 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
- --help) ARGV="$ARGV -h"; shift;;
- --*=*) properties="$properties -Des.${1#--}"
- shift 1
- ;;
- --*) [ $# -le 1 ] && {
- echo "Option requires an argument: '$1'."
- shift
- continue
- }
- 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)
- eval "$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)
- usage
- exit 0
- ;;
- -D)
- properties="$properties -D$2"
- shift 2
- ;;
- -X)
- properties="$properties -X$2"
- shift 2
- ;;
- --)
- shift
- break
- ;;
- *)
- echo "Error parsing argument $1!" >&2
- usage
- exit 1
- ;;
- esac
- done
- # Start up the service
- launch_service "$pidfile" "$daemonized" "$properties"
- exit $?
|