# Elasticsearch service doesn't start upon system reboot

**URL:** <https://discuss.elastic.co/t/elasticsearch-service-doesnt-start-upon-system-reboot/96994>\
**Category:** Elasticsearch\
**Created:** [August 14, 2017, 3:41pm UTC](https://discuss.elastic.co/t/elasticsearch-service-doesnt-start-upon-system-reboot/96994 "2017-08-14T15:41:35Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ravi\_Bhushan](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/ravi_bhushan/32/42363_2.png) [@Ravi\_Bhushan](https://discuss.elastic.co/u/Ravi_Bhushan)\
**Post date:** [August 14, 2017, 3:41pm UTC](https://discuss.elastic.co/t/elasticsearch-service-doesnt-start-upon-system-reboot/96994/1 "2017-08-14T15:41:36Z")

</div>

Hi,  
My environement is below  
Elastic Version - "2.3.5"  
OS - RHEL 7  
JAVA Version  
openjdk version "1.8.0\_141"  
OpenJDK Runtime Environment (build 1.8.0\_141-b16)

Command to start ES - Systemctl start elasticsearch

Issue -  
Whenever I reboot my host server, elastic search fails to start with below error:

Aug 14 06:43:00 \*\*\*\*\*\*\*\*systemd: Starting Elasticsearch...  
Aug 14 06:43:00 \*\*\*\*\*\*\*\* systemd: Started Elasticsearch.  
Aug 14 06:43:01 \*\*\*\*\*\*\*\* elasticsearch: Exception in thread "main" java.nio.file.AccessDeniedException: /var/run/elasticsearch  
Aug 14 06:43:01 **systemd: elasticsearch.service: main process exited, code=exited, status=1/FAILURE  
Aug 14 06:43:01** elasticsearch: at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)  
Aug 14 06:43:01 \*\*\*\*\*\*\*\* elasticsearch: at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)  
Aug 14 06:43:01 \*\*\*\*\*\*\*\* elasticsearch: at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)  
Aug 14 06:43:01 \*\*\*\*\*\*\*\* elasticsearch: at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:384)  
Aug 14 06:43:01 **elasticsearch: at java.nio.file.Files.createDirectory(Files.java:674)  
Aug 14 06:43:01** elasticsearch: at java.nio.file.Files.createAndCheckIsDirectory(Files.java:781)  
Aug 14 06:43:01 \*\*\*\*\*\*\*\*elasticsearch: at java.nio.file.Files.createDirectories(Files.java:767)  
Aug 14 06:43:01 \*\*\*\*\*\*\*\* elasticsearch: at org.elasticsearch.common.PidFile.create(PidFile.java:69)  
Aug 14 06:43:01 \*\*\*\*\*\*\*\*elasticsearch: at org.elasticsearch.common.PidFile.create(PidFile.java:55)  
Aug 14 06:43:01 \*\*\*\*\*\*\*\*elasticsearch: at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:247)  
Aug 14 06:43:01 \*\*\*\*\*\*\*\* elasticsearch: at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35)  
Aug 14 06:43:01 \*\*\*\*\*\*\*\*elasticsearch: Refer to the log for complete error details.  
Aug 14 06:43:01 \*\*\*\*\*\*\*\* systemd: Unit elasticsearch.service entered failed state.  
Aug 14 06:43:01 \*\*\*\*\*\*\*\* systemd: elasticsearch.service failed.

But if i create /var/run/elasticsearch and chown to elasticsearch user. Elasticsearch service starts normally a nd works fine.

Below is my init script:  
#!/bin/sh

# 

# elasticsearch

# 

# chkconfig: 2345 80 20

# description: Starts and stops a single elasticsearch instance on this system

# 

### BEGIN INIT INFO

# Provides: Elasticsearch

# Required-Start: $network $named

# Required-Stop: $network $named

# Default-Start: 2 3 4 5

# Default-Stop: 0 1 6

# Short-Description: This service manages the elasticsearch daemon

# Description: Elasticsearch is a very scalable, schema-free and high-performance search solution supporting multi-tenancy and near realtime search.

### END INIT INFO

# 

# init.d / servicectl compatibility (openSUSE)

# 

if [-f /etc/rc.status]; then  
. /etc/rc.status  
rc\_reset  
fi

# 

# Source function library.

# 

if [-f /etc/rc.d/init.d/functions]; then  
. /etc/rc.d/init.d/functions  
fi

# Sets the default values for elasticsearch variables used in this script

ES\_USER=“elasticsearch”  
ES\_GROUP=“elasticsearch”  
ES\_HOME=“/usr/share/elasticsearch”  
MAX\_OPEN\_FILES=65535  
MAX\_MAP\_COUNT=262144  
LOG\_DIR=“/amex/logs/elasticsearch”  
DATA\_DIR=“/amex/elasticsearch/data”  
CONF\_DIR=“/etc/elasticsearch”  
PID\_DIR=“/var/run/elasticsearch”

# Source the default env file

ES\_ENV\_FILE=“/etc/sysconfig/elasticsearch”  
if [-f “$ES\_ENV\_FILE”]; then  
. “$ES\_ENV\_FILE”  
fi

# CONF\_FILE setting was removed

if [! -z “$CONF\_FILE”]; then  
echo “CONF\_FILE setting is no longer supported. elasticsearch.yml must be placed in the config directory and cannot be renamed.”  
exit 1  
fi  
exec=“$ES\_HOME/bin/elasticsearch”  
prog=“elasticsearch”  
pidfile=“$PID\_DIR/${prog}.pid”  
export ES\_HEAP\_SIZE  
export ES\_HEAP\_NEWSIZE  
export ES\_DIRECT\_SIZE  
export ES\_JAVA\_OPTS  
export ES\_GC\_LOG\_FILE  
export ES\_STARTUP\_SLEEP\_TIME  
export JAVA\_HOME  
export ES\_INCLUDE  
lockfile=/var/lock/subsys/$prog

# backwards compatibility for old config sysconfig files, pre 0.90.1

if [-n $USER] && [-z $ES\_USER] ; then  
ES\_USER=$USER  
fi  
checkJava() {  
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  
}  
start() {  
checkJava  
[-x $exec] || exit 5  
if [-n “$MAX\_LOCKED\_MEMORY” -a -z “$ES\_HEAP\_SIZE”]; then  
echo “MAX\_LOCKED\_MEMORY is set - ES\_HEAP\_SIZE must also be set”  
return 7  
fi  
if [-n “$MAX\_OPEN\_FILES”]; then  
ulimit -n $MAX\_OPEN\_FILES  
fi  
if [-n “$MAX\_LOCKED\_MEMORY”]; then  
ulimit -l $MAX\_LOCKED\_MEMORY  
fi  
if [-n “$MAX\_MAP\_COUNT” -a -f /proc/sys/vm/max\_map\_count]; then  
sysctl -q -w vm.max\_map\_count=$MAX\_MAP\_COUNT  
fi  
export ES\_GC\_LOG\_FILE  
# Ensure that the PID\_DIR exists (it is cleaned at OS startup time)  
if [-n “$PID\_DIR”] && [! -e “$PID\_DIR”]; then  
mkdir -p “$PID\_DIR” && chown “$ES\_USER”:“$ES\_GROUP” “$PID\_DIR”  
fi  
if [-n “$pidfile”] && [! -e “$pidfile”]; then  
touch “$pidfile” && chown “$ES\_USER”:“$ES\_GROUP” “$pidfile”  
fi  
cd $ES\_HOME  
echo -n $“Starting $prog: ”  
# if not running, start it up here, usually something like “daemon $exec”  
daemon --user $ES\_USER --pidfile $pidfile $exec -p $pidfile -d -Des.default.path.home=$ES\_HOME -Des.default.path.logs=$LOG\_DIR -Des.default.path.data=$DATA\_DIR -Des.default.path.conf=$CONF\_DIR  
retval=$?  
echo  
[$retval -eq 0] && touch $lockfile  
return $retval  
}  
stop() {  
echo -n $“Stopping $prog: ”  
# stop it here, often “killproc $prog”  
killproc -p $pidfile -d 86400 $prog  
retval=$?  
echo  
[$retval -eq 0] && rm -f $lockfile  
return $retval  
}  
restart() {  
stop  
start  
}  
reload() {  
restart  
}  
force\_reload() {  
restart  
}  
rh\_status() {  
# run checks to determine if the service is running or use generic status  
status -p $pidfile $prog  
}  
rh\_status\_q() {  
rh\_status \>/dev/null 2\>&1  
}  
case “$1" in  
start)  
rh\_status\_q && exit 0  
$1  
;;  
stop)  
rh\_status\_q || exit 0  
$1  
;;  
restart)  
$1  
;;  
reload)  
rh\_status\_q || exit 7  
$1  
;;  
force-reload)  
force\_reload  
;;  
status)  
rh\_status  
;;  
condrestart|try-restart)  
rh\_status\_q || exit 0  
restart  
;;  
\*)  
echo $“Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}”  
exit 2  
esac  
exit $?

Please let me know if I am doing something wrong.

---

<div class="post-metadata">

**Author:** ![jasontedor](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jasontedor/32/66992_2.png) [@jasontedor](https://discuss.elastic.co/u/jasontedor)\
**Post date:** [August 15, 2017, 2:01am UTC](https://discuss.elastic.co/t/elasticsearch-service-doesnt-start-upon-system-reboot/96994/2 "2017-08-15T02:01:09Z")

</div>

It looks like your `systemd-tmpfiles-setup` service is not running on startup which would create the directory at startup with the correct permissions because we provide `/usr/lib/tmpfiles.d/elasticsearch.conf` that uses this service to do this. I think that you need to verify and fix this.

---

<div class="post-metadata">

**Author:** ![Ravi\_Bhushan](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/ravi_bhushan/32/42363_2.png) [@Ravi\_Bhushan](https://discuss.elastic.co/u/Ravi_Bhushan)\
**Post date:** [August 16, 2017, 1:35am UTC](https://discuss.elastic.co/t/elasticsearch-service-doesnt-start-upon-system-reboot/96994/3 "2017-08-16T01:35:25Z")

</div>

Thanks for reply Jason.  
Yes systemd-tmpfiles-setup was failing because it was not able to find "elasticsearch" user. After further troubleshooting I found that in our environement "elasticsearch" user has been created by someone in LDAP and during boot looks like systemd-tmpfiles-setup is kicking off before power broker service.

Now I am planning to use some different user to run elasticsearch service. It would be great if you point me to any document which talks about using different than default elastucsearch to run elasticsearch service.

Thanks once again!

---

<div class="post-metadata">

**Author:** ![jasontedor](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jasontedor/32/66992_2.png) [@jasontedor](https://discuss.elastic.co/u/jasontedor)\
**Post date:** [August 16, 2017, 2:16am UTC](https://discuss.elastic.co/t/elasticsearch-service-doesnt-start-upon-system-reboot/96994/4 "2017-08-16T02:16:42Z")

</div>

I'm sorry to tell you that since we do not support that (running as a user other than the `elasticsearch` user) I'm not aware of any such documentation. I'm glad that we've resolved the issue here though.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [September 13, 2017, 2:17am UTC](https://discuss.elastic.co/t/elasticsearch-service-doesnt-start-upon-system-reboot/96994/5 "2017-09-13T02:17:00Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
