ERROR: the system property [es.path.conf] must be set服务启动失败解决

## 前言

> 之前都是安装在liunx上的没什么问题,但是今天要把elasticsearch部署到一个windows服务器上,然后到官网下载了最新版的ES 7.9.1 上星期还是7.9.0...正常的 下载 解压 配置 双击elasticsearch.bat启动....成功没什么问题,这种方式把命令符窗口关闭就没了,要一直挂着,重启服务器又要重新打开,麻烦... 然后就把它注册成服务,那样就可以一直运行了,但是发现注册成服务之后无法启动服务,查看日志文件发现:ERROR: the system property [es.path.conf] must be set

> 在网上查了一下发现很少关于这个问题的文章,只有两篇还都是同一种方案(修改elasticsearch-env.bat文件使用es自带的jdk来启动),我试了一下还是不行。

> 后面到 elasticsearch的github上找终于找到了原因并成功解决,记录&分享一下过程

## elasticsearch.bat正常启动

elasticsearch的windows安装就省略了正常的解压修改配置就好了,使用elasticsearch.bat文件启动:

没问题,可以正常访问(这里我的端口9200已经被占用了,所以是9201 & 9301 可以忽略)。

## 注册&启动服务

接下来进入正题:

1. 注册elasticsearch服务**(注意红框的内容)**

2. 启动服务

  - 发现服务无法启动

  - 查看log文件:

## 发现&查找错误

1. 根据网上的解决方案修改elasticsearch-env.bat文件使用es自带的jdk启动

  1. 修改elasticsearch.bat文件

  ```bat

  if defined JAVA_HOME (

  set JAVA="%JAVA_HOME%\bin\java.exe"

  set JAVA_TYPE=JAVA_HOME

  ) else (

  set JAVA="%ES_HOME%\jdk\bin\java.exe"

  set JAVA_HOME="%ES_HOME%\jdk"

  set JAVA_TYPE=bundled jdk

  )

  修改为:

  set JAVA="%ES_HOME%\jdk\bin\java.exe"

  set JAVA_HOME="%ES_HOME%\jdk"

  set JAVA_TYPE=bundled jdk

  ```

  2. 以上步骤再来一遍(略.....)

  3. 然后还是不行,查看日志发现还是一样的错误

5. 因为版本是最新的所以我网上的解决方案很少,所以到elasticsearch的github上找,发现:

网址附上: https://github.com/elastic/elasticsearch/issues/56977

 意思为:

  我找到了错误所在。我们的JVM选项解析器应该发出一串由空格分隔的Java选项。批处理脚本期望单个空格,将其转换为分号,并将其输入到服务注册命令中。但是,选项解析器发出了一个双空格,我们将其转换为双分号,并且服务安装为此而阻塞,并丢弃了我们的大多数JVM选项,包括一些关键的选项。

  我将着眼于修复JVM选项解析器的输出,并在可能的情况下使批处理脚本更健壮。

  **原因**

  “缺少”选项是仅在JDK 14和更高版本上插入的设置,因此,此问题仅应在JDK 13和更低版本上发生。这已添加在故障单#54853中。这只是Windows服务的问题;其他启动命令可以容忍多余的空格。

  **解决方法**

  原始问题中的解决方法并不理想,因为它仍然会丢弃许多JVM选项。更好的解决方法是在其中添加一行以elasticsearch-service.bat删除双分号。已经有一行将空格转换为分号:

  if not "%ES_JAVA_OPTS%" == "" set ES_JAVA_OPTS=%ES_JAVA_OPTS: =;%

  此后,立即插入:

  if not "%ES_JAVA_OPTS%" == "" set ES_JAVA_OPTS=%ES_JAVA_OPTS:;;=;%

  **大白话:**

  ```bat

  修改bin目录下的elasticsearch-service.bat文件

  将:

  if not "%ES_JAVA_OPTS%" == "" set ES_JAVA_OPTS=%ES_JAVA_OPTS: =;%

  修改为:

  if not "%ES_JAVA_OPTS%" == "" set ES_JAVA_OPTS=%ES_JAVA_OPTS:;;=;%

  ```

6. 完成再来一遍!

  发现它还是那个样子......同样的错误!

## 成功解决

  我.......抓一把头发,突然!我有个想法在脑海里飘过~

  我试着结合之前的修改elasticsearch.bat文件

  ```bat

  if defined JAVA_HOME (

  set JAVA="%JAVA_HOME%\bin\java.exe"

  set JAVA_TYPE=JAVA_HOME

  ) else (

  set JAVA="%ES_HOME%\jdk\bin\java.exe"

  set JAVA_HOME="%ES_HOME%\jdk"

  set JAVA_TYPE=bundled jdk

  )

  修改为:

  set JAVA="%ES_HOME%\jdk\bin\java.exe"

  set JAVA_HOME="%ES_HOME%\jdk"

  set JAVA_TYPE=bundled jdk

  ```

1. 注册服务

2. 启动服务,成功

3. 浏览器访问,矛问题

注:在liunx不必修改以上配置,此问题出现在windows上

最后成功解决~_~

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。