Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Elasticsearch:无法启动Windows服务。必须设置系统属性[es.path.conf]_Java_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Procrun - Fatal编程技术网 elasticsearch,procrun,Java,elasticsearch,Procrun" /> elasticsearch,procrun,Java,elasticsearch,Procrun" />

Java Elasticsearch:无法启动Windows服务。必须设置系统属性[es.path.conf]

Java Elasticsearch:无法启动Windows服务。必须设置系统属性[es.path.conf],java,elasticsearch,procrun,Java,elasticsearch,Procrun,我们面临一个来自多个用户的问题,他们无法在机器上使用Elasticsearch(windows服务无法启动)。正在使用的版本是6.6.0 我们从现场得到的信息非常差,不足以对问题做出良好的诊断(希望我们得到更好的信息)。然而,以下是我们所知道的: 标准输出日志文件指向以下内容: 服务安装/启动批处理文件指出服务已正确安装和启动。此外,在安装过程中设置了-Des.path.conf=“C:\ProgramData\Elastic\Elasticsearch\config” 据我们所知,E

我们面临一个来自多个用户的问题,他们无法在机器上使用Elasticsearch(windows服务无法启动)。正在使用的版本是6.6.0

我们从现场得到的信息非常差,不足以对问题做出良好的诊断(希望我们得到更好的信息)。然而,以下是我们所知道的:

  • 标准输出日志文件指向以下内容:
  • 服务安装/启动批处理文件指出服务已正确安装和启动。此外,在安装过程中设置了
    -Des.path.conf=“C:\ProgramData\Elastic\Elasticsearch\config”
  • 据我们所知,ES_HOME和ES_PATH_CONF设置为:
从我在ES源代码中看到的情况来看,错误消息似乎来自“EnvironmentawaRecomand.java”。在这个级别上,
System.getProperty(“es.path.conf”)
似乎正在返回
null

作为总结,我看到以下内容:

C:\Program Files\Elastic\Elasticsearch>"C:\Program Files\Elastic\Elasticsearch\bin\elasticsearch-service-x64.exe" //IS//elasticsearch-service-x64 --Startup auto --StopTimeout 0 --StartClass org.elasticsearch.bootstrap.Elasticsearch --StartMethod main ++StartParams --quiet --StopClass org.elasticsearch.bootstrap.Elasticsearch --StopMethod close --Classpath "C:\Program Files\Elastic\Elasticsearch\lib\*" --JvmMs 256  --JvmMx 256  --JvmSs 1024 --JvmOptions -Xms256m;-Xmx256m;-XX:+UseConcMarkSweepGC;-XX:CMSInitiatingOccupancyFraction=75;-XX:+UseCMSInitiatingOccupancyOnly;-Des.networkaddress.cache.ttl=60;-Des.networkaddress.cache.negative.ttl=10;-XX:+AlwaysPreTouch;-Xss1m;-Djava.awt.headless=true;-Dfile.encoding=UTF-8;-Djna.nosys=true;-XX:-OmitStackTraceInFastThrow;-Dio.netty.noUnsafe=true;-Dio.netty.noKeySetOptimization=true;-Dio.netty.recycler.maxCapacityPerThread=0;-Dlog4j.shutdownHookEnabled=false;-Dlog4j2.disable.jmx=true;-Djava.io.tmpdir=C:\Users\KE'SBU~1\AppData\Local\Temp\elasticsearch;-XX:+HeapDumpOnOutOfMemoryError;-XX:HeapDumpPath=data;-XX:ErrorFile=logs/hs_err_pid%p.log;-XX:+PrintGCDetails;-XX:+PrintGCDateStamps;-XX:+PrintTenuringDistribution;-XX:+PrintGCApplicationStoppedTime;-Xloggc:logs/gc.log;-XX:+UseGCLogFileRotation;-XX:NumberOfGCLogFiles=32;-XX:GCLogFileSize=64m ++JvmOptions -Delasticsearch;-Des.path.home="C:\Program Files\Elastic\Elasticsearch";-Des.path.conf="C:\ProgramData\Elastic\Elasticsearch\config";-Des.distribution.flavor="default";-Des.distribution.type="zip" --LogPath "C:\Program Files\Elastic\Elasticsearch\logs" --LogPrefix "elasticsearch-service-x64" --StdError auto --StdOutput auto --PidFile "elasticsearch-service-x64.pid" --DisplayName "Elasticsearch 6.6.0 (elasticsearch-service-x64)" --Description "Elasticsearch 6.6.0 Windows Service - https://elastic.co" --Jvm "C:\Program Files\Elastic\Elasticsearch\jdk\jre\bin\server\jvm.dll" --StartMode jvm --StopMode jvm --StartPath "C:\Program Files\Elastic\Elasticsearch"  ++Environment HOSTNAME="%COMPUTERNAME%" 
  • 环境变量集
  • 使用Java选项安装Windows服务
    -Des.path.conf=“C:\ProgramData\Elastic\Elasticsearch\config”
  • Windows服务显示
    错误:必须设置系统属性[es.path.conf]
不幸的是,我们无法访问注册表或
elasticsearch服务mgr.exe
,因此我们可以检查
es.path.conf
的实际值

我们错过了什么?有人知道为什么ES会抛出那个错误吗

提前谢谢

更新

我们能够连接到一台有问题的机器。问题的罪魁祸首不知何故是窗口用户名

从前面的日志文件中,我们可以看到对服务的调用如下:

C:\Program Files\Elastic\Elasticsearch>"C:\Program Files\Elastic\Elasticsearch\bin\elasticsearch-service-x64.exe" //IS//elasticsearch-service-x64 --Startup auto --StopTimeout 0 --StartClass org.elasticsearch.bootstrap.Elasticsearch --StartMethod main ++StartParams --quiet --StopClass org.elasticsearch.bootstrap.Elasticsearch --StopMethod close --Classpath "C:\Program Files\Elastic\Elasticsearch\lib\*" --JvmMs 256  --JvmMx 256  --JvmSs 1024 --JvmOptions -Xms256m;-Xmx256m;-XX:+UseConcMarkSweepGC;-XX:CMSInitiatingOccupancyFraction=75;-XX:+UseCMSInitiatingOccupancyOnly;-Des.networkaddress.cache.ttl=60;-Des.networkaddress.cache.negative.ttl=10;-XX:+AlwaysPreTouch;-Xss1m;-Djava.awt.headless=true;-Dfile.encoding=UTF-8;-Djna.nosys=true;-XX:-OmitStackTraceInFastThrow;-Dio.netty.noUnsafe=true;-Dio.netty.noKeySetOptimization=true;-Dio.netty.recycler.maxCapacityPerThread=0;-Dlog4j.shutdownHookEnabled=false;-Dlog4j2.disable.jmx=true;-Djava.io.tmpdir=C:\Users\KE'SBU~1\AppData\Local\Temp\elasticsearch;-XX:+HeapDumpOnOutOfMemoryError;-XX:HeapDumpPath=data;-XX:ErrorFile=logs/hs_err_pid%p.log;-XX:+PrintGCDetails;-XX:+PrintGCDateStamps;-XX:+PrintTenuringDistribution;-XX:+PrintGCApplicationStoppedTime;-Xloggc:logs/gc.log;-XX:+UseGCLogFileRotation;-XX:NumberOfGCLogFiles=32;-XX:GCLogFileSize=64m ++JvmOptions -Delasticsearch;-Des.path.home="C:\Program Files\Elastic\Elasticsearch";-Des.path.conf="C:\ProgramData\Elastic\Elasticsearch\config";-Des.distribution.flavor="default";-Des.distribution.type="zip" --LogPath "C:\Program Files\Elastic\Elasticsearch\logs" --LogPrefix "elasticsearch-service-x64" --StdError auto --StdOutput auto --PidFile "elasticsearch-service-x64.pid" --DisplayName "Elasticsearch 6.6.0 (elasticsearch-service-x64)" --Description "Elasticsearch 6.6.0 Windows Service - https://elastic.co" --Jvm "C:\Program Files\Elastic\Elasticsearch\jdk\jre\bin\server\jvm.dll" --StartMode jvm --StopMode jvm --StartPath "C:\Program Files\Elastic\Elasticsearch"  ++Environment HOSTNAME="%COMPUTERNAME%" 
有趣的部分是如何设置
-Djava.io.tmpdir=C:\Users\KE'SBU~1\AppData\Local\Temp\elasticsearch
。如您所见,路径包含一个单引号字符

通过查看procrun存储java参数的注册表项,我们可以看到所有java选项都因此而中断(单引号不存在,并且
-Djava.io.tmpdir
后面的JVM选项似乎没有被解析):

因此,在我看来,问题在于JVM选项被解析的地方,不允许使用单引号字符

更新2

从Procrun文档中:

++JVMPoptions以-D或-X的形式列出将传递给JVM的选项。选项之间使用#或;人物。如果需要嵌入#或;字符将它们放在单引号内。(未在exe模式下使用。)

这在某种程度上意味着单引号是#和;…的转义字符。。。但是,如何摆脱单一的报价

更新3
为ES打开了一个问题,包含一个解决方法->

我记得,如果使用
%variable%
,脚本中的Windows变量替换会有不同的行为!变数语法。我对Elasticsearch也有类似的问题,最后修改了
Elasticsearch.bat
Elasticsearch env.bat
以使用
问题变量的替换。很抱歉,我找不到这个链接。@grog谢谢你的评论。但是,我认为问题不在ES批处理文件上,因为它的输出是正确的(传递给procrun的值是-Djava.io.tmpdir=C:\Users\KE'SBU~1\AppData\Local\Temp\elasticsearch)。我认为问题更多的是procrun如何解析路径,更准确地说是单个引号的含义。
C:\Program Files\Elastic\Elasticsearch>"C:\Program Files\Elastic\Elasticsearch\bin\elasticsearch-service-x64.exe" //ES//elasticsearch-service-x64 --LogPath "C:\Program Files\Elastic\Elasticsearch\logs" --LogPrefix "elasticsearch-service-x64" --StdError auto --StdOutput auto 

C:\Program Files\Elastic\Elasticsearch>if not errorlevel 1 goto started 

C:\Program Files\Elastic\Elasticsearch>echo The service 'elasticsearch-service-x64' has been started 
The service 'elasticsearch-service-x64' has been started

C:\Program Files\Elastic\Elasticsearch>goto:eof
C:\>echo %ES_HOME%
C:\Program Files\Elastic\Elasticsearch


C:\>echo %ES_PATH_CONF%
C:\ProgramData\Elastic\Elasticsearch\config
C:\Program Files\Elastic\Elasticsearch>"C:\Program Files\Elastic\Elasticsearch\bin\elasticsearch-service-x64.exe" //IS//elasticsearch-service-x64 --Startup auto --StopTimeout 0 --StartClass org.elasticsearch.bootstrap.Elasticsearch --StartMethod main ++StartParams --quiet --StopClass org.elasticsearch.bootstrap.Elasticsearch --StopMethod close --Classpath "C:\Program Files\Elastic\Elasticsearch\lib\*" --JvmMs 256  --JvmMx 256  --JvmSs 1024 --JvmOptions -Xms256m;-Xmx256m;-XX:+UseConcMarkSweepGC;-XX:CMSInitiatingOccupancyFraction=75;-XX:+UseCMSInitiatingOccupancyOnly;-Des.networkaddress.cache.ttl=60;-Des.networkaddress.cache.negative.ttl=10;-XX:+AlwaysPreTouch;-Xss1m;-Djava.awt.headless=true;-Dfile.encoding=UTF-8;-Djna.nosys=true;-XX:-OmitStackTraceInFastThrow;-Dio.netty.noUnsafe=true;-Dio.netty.noKeySetOptimization=true;-Dio.netty.recycler.maxCapacityPerThread=0;-Dlog4j.shutdownHookEnabled=false;-Dlog4j2.disable.jmx=true;-Djava.io.tmpdir=C:\Users\KE'SBU~1\AppData\Local\Temp\elasticsearch;-XX:+HeapDumpOnOutOfMemoryError;-XX:HeapDumpPath=data;-XX:ErrorFile=logs/hs_err_pid%p.log;-XX:+PrintGCDetails;-XX:+PrintGCDateStamps;-XX:+PrintTenuringDistribution;-XX:+PrintGCApplicationStoppedTime;-Xloggc:logs/gc.log;-XX:+UseGCLogFileRotation;-XX:NumberOfGCLogFiles=32;-XX:GCLogFileSize=64m ++JvmOptions -Delasticsearch;-Des.path.home="C:\Program Files\Elastic\Elasticsearch";-Des.path.conf="C:\ProgramData\Elastic\Elasticsearch\config";-Des.distribution.flavor="default";-Des.distribution.type="zip" --LogPath "C:\Program Files\Elastic\Elasticsearch\logs" --LogPrefix "elasticsearch-service-x64" --StdError auto --StdOutput auto --PidFile "elasticsearch-service-x64.pid" --DisplayName "Elasticsearch 6.6.0 (elasticsearch-service-x64)" --Description "Elasticsearch 6.6.0 Windows Service - https://elastic.co" --Jvm "C:\Program Files\Elastic\Elasticsearch\jdk\jre\bin\server\jvm.dll" --StartMode jvm --StopMode jvm --StartPath "C:\Program Files\Elastic\Elasticsearch"  ++Environment HOSTNAME="%COMPUTERNAME%" 
-Xms256m
-Xmx256m
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly
-Des.networkaddress.cache.ttl=60
-Des.networkaddress.cache.negative.ttl=10
-XX:+AlwaysPreTouch
-Xss1m
-Djava.awt.headless=true
-Dfile.encoding=UTF-8
-Djna.nosys=true
-XX:-OmitStackTraceInFastThrow
-Dio.netty.noUnsafe=true
-Dio.netty.noKeySetOptimization=true
-Dio.netty.recycler.maxCapacityPerThread=0
-Dlog4j.shutdownHookEnabled=false
-Dlog4j2.disable.jmx=true
-Djava.io.tmpdir=C:\Users\KESBU~1\AppData\Local\Temp\elasticsearch;-        XX:+HeapDumpOnOutOfMemoryError;-XX:HeapDumpPath=data;-XX:ErrorFile=logs/hs_err_pid%p.log;-XX:+PrintGCDetails;-XX:+PrintGCDateStamps;-XX:+PrintTenuringDistribution;-XX:+PrintGCApplicationStoppedTime;-Xloggc:logs/gc.log;-XX:+UseGCLogFileRotation;-XX:NumberOfGCLogFiles=32;-XX:GCLogFileSize=64m

-Delasticsearch
-Des.path.home=C:\Program Files\Elastic\Elasticsearch
-Des.path.conf=C:\ProgramData\Elastic\Elasticsearch\config
-Des.distribution.flavor=default
-Des.distribution.type=zip