Запрос относительно запуска / остановки Zookeeper Windows API с использованием Zk в качестве службы Windows (с использованием prunsrv)

Я использую zookeeper в своем продукте (3.3.3). Работая с zookeeper в Windows, я создаю службу (используя prunsrv), у меня мало запросов и проблем. Перечислил их все,

Проблемы: 1) zkServer.cmd не запускался на компьютере с Win server 2008 и Win 7 Enterprise (оба 64-разрядных), пришлось заменить следующую строку,

java "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %*

to

java "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%"
          And it worked, could it be fixed in some other way?

2) В zoo.cnf я указал dataDir, но он все же создает другой каталог (bin / zookeeper-3.4.5zookeeper-3.4.5data / version-2 / snapshot) и сохраняет там снимки.

Запросы: 1) Нет запуска / остановки с zkServer.cmd, как в zkServer.sh, поэтому в основном он запускается с zkServer.cmd, но для остановки я делаю Ctrl + C / Z, поэтому, если я запускаю процесс, он это процесс переднего плана и его убивают, когда я нажимаю ctrl + C

2) Мне нужно создать службу zookeeper, и для этого я использую prunsrv. Я придумал два следующих способа сделать это.

a)   

prunsrv //IS//Zookeeper --DisplayName=" ZOOKEEPER Service" --Description=" ZOOKEEPER Service" --Startup=auto --StartMode=exe --StartPath=%ZOOKEEPER_HOME% --StartImage=%ZOOKEEPER_HOME%\bin\zkServer.cmd --StopTimeout=5 --LogPath=%LOGS_DIR% --LogPrefix=zookeeper --LogLevel=Info --PidFile=zookeeper.pid --StdOutput=auto --StdError=auto


b)  

cd %ZOOKEEPER_HOME%\bin\
                call "%~dp0zkEnv.cmd"
                set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain
                prunsrv //IS//Zookeeper --DisplayName=" ZOOKEEPER Service" --Description=" ZOOKEEPER Service" --Jvm="%JVM_DLL%" --JvmOptions=!JAVA_OPTS!  --Environment=zookeeper.log.dir=%ZOO_LOG_DIR%;zookeeper.root.logger=%ZOO_LOG4J_PROP%; --Startup=auto --LibraryPath=%LIB_DIR% --StartMode=jvm --Classpath=%CLASSPATH% %ZOOMAIN% %ZOOCFG% --StartClass=org.apache.zookeeper.server.quorum.QuorumPeerMain --StartMethod=start --StopMode=jvm --StopClass=org.apache.zookeeper.server.quorum.QuorumPeerMain --StopMethod=stop --StopTimeout=10 --LogPath=%LOGS_DIR% --LogPrefix=zookeeper --LogLevel=Info --PidFile=zookeeper.pid --StdOutput=auto --StdError=auto

в основном во втором подходе я сам выполняю все задачи, выполняемые zkServer.cmd

= >> Мой запрос находится на втором шаге (2b), что для остановки службы должен быть открыт метод остановки, так что когда я останавливаю службу, она вызывается. Итак, прямо сейчас, если я создаю службу и запускаю ее, ZK работает нормально, но ее остановка занимает неопределенное время, поэтому я должен пойти и убить процесс. Есть ли для этого же stop (), я вижу shutdown (), но для него нет описания

Я прошел через класс org.apache.zookeeper.server.quorum.QuorumPeerMain, здесь main () - это метод запуска (если я правильно понимаю), и должен быть какой-то метод для завершения процесса.

Получил следующую ссылку

https://issues.apache.org/jira/browse/ZOOKEEPER-1122 , показывает старт / стоп, но с остановкой есть некоторые проблемы

это вызывает следующую ошибку:

E:\zookeeper-3.4.5\zookeeper-3.4.5\bin>zkServer.cmd stop
"JMX enabled by default"
"Using config: E:\zookeeper-3.4.5\zookeeper-3.4.5\bin\..\conf\zoo.cfg"
 "Stopping zookeeper ... "
ERROR: The process with PID 452 (child process of PID 4) could not be terminated.
Reason: This is critical system process. Taskkill cannot end this process.
ERROR: The process with PID 4 (child process of PID 0) could not be terminated.
Reason: Access is denied.
ERROR: The process with PID 0 (child process of PID 0) could not be terminated.
Reason: This is critical system process. Taskkill cannot end this process.
STOPED

Я запускаю эту команду остановки в консоли администратора.

E: \ zookeeper-3.4.5 \ zookeeper-3.4.5 \ bin> список задач | findstr "java" java.exe 10324 Консоль 1 36036 K.

Любая помощь будет высоко ценится


person nandini    schedule 12.03.2014    source источник


Ответы (1)


Итак, вы хотите запустить Zookeeper как службу Windows. У меня было такое же требование, вот решение, которое я выбрал:

  1. Предварительные требования: Zookeeper и prunsrv
  2. Задайте для переменной среды ZOOKEEPER_SERVICE имя создаваемой службы Windows и ZOOKEEPER_HOME путь к домашней папке zookeeper. Потом,

    prunsrv.exe "//IS//%ZOOKEEPER_SERVICE%" ^
            --DisplayName="Zookeeper (%ZOOKEEPER_SERVICE%)" ^
            --Description="Zookeeper (%ZOOKEEPER_SERVICE%)" ^
            --Startup=auto --StartMode=exe ^
            --StartPath=%ZOOKEEPER_HOME% ^
            --StartImage=%ZOOKEEPER_HOME%\bin\zkServer.cmd ^
            --StopPath=%ZOOKEEPER_HOME%\ ^
            --StopImage=%ZOOKEEPER_HOME%\bin\zkServerStop.cmd ^
            --StopMode=exe --StopTimeout=5 ^
            --LogPath=%ZOOKEEPER_HOME% --LogPrefix=zookeeper-wrapper ^
            --PidFile=zookeeper.pid --LogLevel=Info --StdOutput=auto --StdError=auto
    
  3. Добавьте файл zkServerStop.cmd в папку bin zookeeper со следующим содержимым:

    @echo off
    setlocal
    TASKLIST /svc | findstr /c:"%ZOOKEEPER_SERVICE%" > %ZOOKEEPER_HOME%\zookeeper_svc.pid
    FOR /F "tokens=2 delims= " %%G IN (%ZOOKEEPER_HOME%\zookeeper_svc.pid) DO (
        @set zkPID=%%G
    )
    taskkill /PID %zkPID% /T /F
    del %ZOOKEEPER_HOME%/zookeeper_svc.pid
    endlocal
    

    (Конечно, необходимо установить две переменные среды ZOOKEEPER_HOME и ZOOKEEPER_SERVICE)

Надеюсь, это поможет,
Гийом.

person Guillaume    schedule 12.08.2015