## 前言
> 之前都是安装在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上
最后成功解决~_~