why elasticsearch won't run on Ubuntu 14.04?

Elasticsearch service init script doesn't print any error information on console or log file when it fails to startup, instead it ridiculously shows [OK].

You have to run elaticsearch manually with the same user and same parameters as what the init script does to check what's going wrong. The error message will be printed on console.

On my Ubuntu 14.10 with elasticsearch-1.4.1.deb installed, without any path changed, the command to run elastisearch is:

sudo -u elasticsearch /usr/share/elasticsearch/bin/elasticsearch -d -p /var/run/elasticsearch.pid --default.config=/etc/elasticsearch/elasticsearch.yml --default.path.home=/usr/share/elasticsearch --default.path.logs=/var/log/elasticsearch --default.path.data=/var/lib/elasticsearch --default.path.work=/tmp/elasticsearch --default.path.conf=/etc/elasticsearch

I just added a line into /etc/init.d/elasticsearch to print out the above command:

# Start Daemon
log_daemon_msg "sudo -u $ES_USER $DAEMON $DAEMON_OPTS"    # <-- Add this line
start-stop-daemon --start -b --user "$ES_USER" -c "$ES_USER" --pidfile "$PID_FILE" --exec $DAEMON -- $DAEMON_OPTS
log_end_msg $?

The elasticsearch user cannot write the PID file because it has no permissions to create a file in /var/run/:

FileNotFoundException[/var/run/elasticsearch.pid (Keine Berechtigung)]

The fix: create the directory /var/run/elasticsearch/, change its ownership to elasticsearch:elasticsearch, and change the PID file location to this directory in the init script.

mkdir -p /var/run/elasticsearch
chown elasticsearch: /var/run/elasticsearch
sed -e 's|^PID_FILE=.*$|PID_FILE=/var/run/$NAME/$NAME.pid|g' -i /etc/init.d/elasticsearch

Once you get that far, here's the next error you might see:

ElasticsearchIllegalStateException[Failed to obtain node lock, is the following location writable?: [/var/lib/elasticsearch/elasticsearch]]

Again a resource does not have the correct permissions for the elasticsearch user.

chown -R elasticsearch: /var/lib/elasticsearch

Not done yet. Now you have to edit /etc/init.d/elasticsearch and remove this line:

test "$START_DAEMON" == true || exit 0

This line is utter garbage and is guaranteed to cause an exit.

Now it should finally start.


If you are using Elasticsearch > 5.0

Min/max heap size requirements for Elasticsearch 5.0 are now both defaulted to 2gb

Check the ls /tmp/hs_err_pid*.log files, in the logs you'll see that JVM failed to start ES because of insufficient memory.

You can adjust the heap size settings in /etc/elasticsearch/jvm.options. Adjust the lines -Xms2g and -Xmx2g to -Xms1g and -Xmx1g respectively, if you're on a box with 2 GB of RAM. If you're going to use a box with 1 GB of RAM I would recommend using -Xms512m and -Xmx512m.

Reference