Windows could not start the Elasticsearch 7.9.0 (elasticsearch-service-x64) service on Local Computer.
elasticsearch 7.9 버전을 설치한 후, 명령행에서 정상 동작하는 것을 확인하고 NT 서비스로 등록했는데,
C:\es7_9\bin>elasticsearch-service.bat install
Installing service : "elasticsearch-service-x64"
Using JAVA_HOME (64-bit): "C:\Program Files\Java\jdk-11.0.8"
-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;-Dio.netty.allocator.numDirectArenas=0;-Dlog4j.shutdownHookEnabled=false;-Dlog4j2.disable.jmx=true;-Djava.locale.providers=SPI,COMPAT;-Xms1g;-Xmx1g;-XX:+UseConcMarkSweepGC;-XX:CMSInitiatingOccupancyFraction=75;-XX:+UseCMSInitiatingOccupancyOnly;-Djava.io.tmpdir=C:\Users\kevin\AppData\Local\Temp\5\elasticsearch;-XX:+HeapDumpOnOutOfMemoryError;-XX:HeapDumpPath=data;-XX:ErrorFile=logs/hs_err_pid%p.log;-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m;-XX:MaxDirectMemorySize=536870912
The service 'elasticsearch-service-x64' has been installed.
시작하면 다음과 같은 오류가 발생합니다.
Windows could not start the Elasticsearch 7.9.0 (elasticsearch-service-x64) service on Local Computer.
Error 1067: The process terminated unexpectedly.
이때의 이벤트 로그에는 별다르게 도움이 되는 정보가 없고,
Log Name: System
Source: Service Control Manager
Date: 9/3/2020 11:30:55 PM
Event ID: 7034
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: vm1
Description:
The Elasticsearch 7.9.0 (elasticsearch-service-x64) service terminated unexpectedly.
그나마 로그 파일에 쓸만한 정보가 남아 있어,
// 로그 파일: C:\es7_9\logs\elasticsearch-service-x64-stderr.2020-09-03.log
2020-09-03 23:34:31 Commons Daemon procrun stderr initialized
ERROR: the system property [es.path.conf] must be set
저 키워드로 검색해 보니 다행히 답이 나옵니다.
Can not install Windows Service : "the system property [es.path.conf] must be set" #61333
; https://github.com/elastic/elasticsearch/issues/61333
정리하면, "\bin\elasticsearch-service.bat" 파일의 내용에서,
...[생략]...
if not "%SERVICE_USERNAME%" == "" (
if not "%SERVICE_PASSWORD%" == "" (
set SERVICE_PARAMS=%SERVICE_PARAMS% --ServiceUser "%SERVICE_USERNAME%" --ServicePassword "%SERVICE_PASSWORD%"
)
)
"%EXECUTABLE%" //IS//%SERVICE_ID% --Startup %ES_START_TYPE% --StopTimeout %ES_STOP_TIMEOUT% --StartClass org.elasticsearch.bootstrap.Elasticsearch --StartMethod main ++StartParams --quiet --StopClass org.elasticsearch.bootstrap.Elasticsearch --StopMethod close --Classpath "%ES_CLASSPATH%" --JvmMs %JVM_MS% --JvmMx %JVM_MX% --JvmSs %JVM_SS% --JvmOptions %OTHER_JAVA_OPTS% ++JvmOptions %ES_PARAMS% %LOG_OPTS% --PidFile "%SERVICE_ID%.pid" --DisplayName "%SERVICE_DISPLAY_NAME%" --Description "%SERVICE_DESCRIPTION%" --Jvm "%JAVA_HOME%%JVM_DLL%" --StartMode jvm --StopMode jvm --StartPath "%ES_HOME%" %SERVICE_PARAMS% ++Environment HOSTNAME="%%COMPUTERNAME%%"
...[생략]...
저렇게 "%EXECUTABLE%"이 실행되기 전 다음과 같이 라인 하나를 추가하면 됩니다.
...[생략]...
if not "%SERVICE_USERNAME%" == "" (
if not "%SERVICE_PASSWORD%" == "" (
set SERVICE_PARAMS=%SERVICE_PARAMS% --ServiceUser "%SERVICE_USERNAME%" --ServicePassword "%SERVICE_PASSWORD%"
)
)
if not "%OTHER_JAVA_OPTS%" == "" set OTHER_JAVA_OPTS=%OTHER_JAVA_OPTS:;;=;%
"%EXECUTABLE%" //IS//%SERVICE_ID% --Startup %ES_START_TYPE% --StopTimeout %ES_STOP_TIMEOUT% --StartClass org.elasticsearch.bootstrap.Elasticsearch --StartMethod main ++StartParams --quiet --StopClass org.elasticsearch.bootstrap.Elasticsearch --StopMethod close --Classpath "%ES_CLASSPATH%" --JvmMs %JVM_MS% --JvmMx %JVM_MX% --JvmSs %JVM_SS% --JvmOptions %OTHER_JAVA_OPTS% ++JvmOptions %ES_PARAMS% %LOG_OPTS% --PidFile "%SERVICE_ID%.pid" --DisplayName "%SERVICE_DISPLAY_NAME%" --Description "%SERVICE_DESCRIPTION%" --Jvm "%JAVA_HOME%%JVM_DLL%" --StartMode jvm --StopMode jvm --StartPath "%ES_HOME%" %SERVICE_PARAMS% ++Environment HOSTNAME="%%COMPUTERNAME%%"
...[생략]...
이후 다시 elasticsearch-service.bat로 서비스를 등록해 주시면 정상적으로 서비스도 시작하는 것을 확인할 수 있습니다.
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]