Elasticsearch – running as a linux service


In order to run elasticsearch as a service on your operating system, the provided packages try to make it as easy as possible for you to start and stop elasticsearch during reboot and upgrades.


Currently our build automatically creates a debian package and an RPM package, which is available on the download page. The package itself does not have any dependencies, but you have to make sure that you installed a JDK.

Each package features a configuration file, which allows you to set the following parameters

ES_USERThe user to run as, defaults to elasticsearch
ES_GROUPThe group to run as, defaults to elasticsearch
ES_HEAP_SIZEThe heap size to start with
ES_HEAP_NEWSIZEThe size of the new generation heap
ES_DIRECT_SIZEThe maximum size of the direct memory
MAX_OPEN_FILESMaximum number of open files, defaults to 65535
MAX_LOCKED_MEMORYMaximum locked memory size. Set to “unlimited” if you use the bootstrap.mlockall option in elasticsearch.yml. You must also set ES_HEAP_SIZE.
MAX_MAP_COUNTMaximum number of memory map areas a process may have. If you use mmapfs as index store type, make sure this is set to a high value. For more information, check thelinux kernel documentation about max_map_count. This is set via sysctl before starting elasticsearch. Defaults to 65535
LOG_DIRLog directory, defaults to /var/log/elasticsearch
DATA_DIRData directory, defaults to /var/lib/elasticsearch
CONF_DIRConfiguration file directory (which needs to include elasticsearch.yml andlogging.yml files), defaults to /etc/elasticsearch
ES_JAVA_OPTSAny additional java options you may want to apply. This may be useful, if you need to set the node.name property, but do not want to change the elasticsearch.ymlconfiguration file, because it is distributed via a provisioning system like puppet or chef. Example: ES_JAVA_OPTS="-Des.node.name=search-01"
RESTART_ON_UPGRADEConfigure restart on package upgrade, defaults to false. This means you will have to restart your elasticsearch instance after installing a package manually. The reason for this is to ensure, that upgrades in a cluster do not result in a continuous shard reallocation resulting in high network traffic and reducing the response times of your cluster.
ES_GC_LOG_FILEThe absolute log file path for creating a garbage collection logfile, which is done by the JVM. Note that this logfile can grow pretty quick and thus is disabled by default.


The debian package ships with everything you need as it uses standard debian tools like update update-rc.d to define the runlevels it runs on. The init script is placed at /etc/init.d/elasticsearch as you would expect it. The configuration file is placed at /etc/default/elasticsearch.

The debian package does not start up the service by default. The reason for this is to prevent the instance to accidentally join a cluster, without being configured appropriately. After installing using dpkg -i you can use the following commands to ensure, that elasticsearch starts when the system is booted and then start up elasticsearch:

sudo update-rc.d elasticsearch defaults 95 10
sudo /etc/init.d/elasticsearch start

Users running Debian 8 or Ubuntu 14 or later may require configuration of systemd instead of update-rc.d. In those cases, please refer to the the section called “Using systemdedit” section.

Installing the oracle JDKedit

The usual recommendation is to run the Oracle JDK with elasticsearch. However Ubuntu and Debian only ship the OpenJDK due to license issues. You can easily install the oracle installer package though. In case you are missing the add-apt-repository command under Debian GNU/Linux, make sure have at least Debian Jessie and the package python-software-properties installed

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
java -version

The last command should verify a successful installation of the Oracle JDK.

RPM based distributionsedit

Using chkconfigedit

Some RPM based distributions are using chkconfig to enable and disable services. The init script is located at /etc/init.d/elasticsearch, where as the configuration file is placed at /etc/sysconfig/elasticsearch. Like the debian package the RPM package is not started by default after installation, you have to do this manually by entering the following commands

sudo /sbin/chkconfig --add elasticsearch
sudo service elasticsearch start

Using systemdedit

Distributions like Debian Jessie, Ubuntu 14, and many of the SUSE derivitives do not use the chkconfig tool to register services, but rather systemd and its command /bin/systemctl to start and stop services (at least in newer versions, otherwise use the chkconfig commands above). The configuration file is also placed at/etc/sysconfig/elasticsearch if the system is rpm based and /etc/default/elasticsearch if it is deb. After installing the RPM, you have to change the systemd configuration and then start up elasticsearch

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
sudo /bin/systemctl start elasticsearch.service

Also note that changing the MAX_MAP_COUNT setting in /etc/sysconfig/elasticsearch does not have any effect, you will have to change it in /usr/lib/sysctl.d/elasticsearch.conf in order to have it applied at startup.

Views: 28


What is the capital of Egypt? ( Cairo )