Настройка для службы Windows Tika с демоном Apache Commons

Я пытаюсь запустить Tika JAXRS в качестве службы Windows, используя Apache Commons Daemon.

У меня есть tika-server-1.7.jar с http://tika.apache.org/download.html

Я скачал v1.0.15 бинарных файлов Windows для Apache Commons Daemon с http://commons.apache.org/proper/commons-daemon/binaries.html

Я могу запустить Tika как службу, но не могу определить, что использовать для метода остановки.

prunsrv.exe //IS//tika-daemon
 --DisplayName "Tika Daemon" 
 --Classpath "C:\Tika Service\tika-server-1.7.jar"
 --StartClass "org.apache.tika.server.TikaServerCli"
 --StopClass "org.apache.tika.server.TikaServerCli"
 --StartMethod main
 --StopMethod main
 --Description "Tika Daemon Windows Service"
 --StartMode java
 --StopMode java

Это начинается и работает, как я надеюсь, но при попытке остановить службу не отвечает. очевидно org.apache.tika.server.TikaServerCli.main(string[] args) не подходящий метод остановки, но я потерян для альтернатив.

Я также приветствовал бы любые альтернативные методы для запуска Tika в качестве службы Windows или иного автоматического запуска вне интерактивного сеанса.

1 ответ

Казалось бы, это известная проблема Apache Commons Daemon 1.0.15. https://issues.apache.org/jira/browse/DAEMON-298

Я поменялся местами в версии 1.0.14, скачанной из архива Apache http://archive.apache.org/dist/commons/daemon/binaries/windows/ и служба теперь закрывается.

Оригинал java StartMode выдает ошибку при выключении, но выключается. exe Хотя StartMode работает без проблем.

Я столкнулся с этим около года назад и нашел решение. Запуск Apache Commons Daemon в режиме JVM позволит вам указать StartClass и StartMethod, что отлично работает, потому что вы можете просто указать его наstatic void Main(...){}

Однако стоп не работает, потому что нет метода остановки для вызова.

Итак, я собрал из исходников и добавил метод остановки. Я создал для этого пиар в проекте tika. Решение Babble, за которое проголосовали против, в основном то же самое, но я бы очень хотел, чтобы оно было доступно в базовом файле jar. https://github.com/apache/tika/pull/324

https://www.michaelwda.com/post/tika_windows_service несколько дополнительных деталей и снимков экрана здесь.

C:\source\tika\commons-daemon-1.2.2-bin-windows\amd64\prunsrv.exe //IS//tika-daemon ^
--DisplayName "Tika Daemon"  ^
--Description "Tika Daemon Windows Service" ^
--Classpath C:\source\tika\tika-server.jar ^
--StartClass "org.apache.tika.server.TikaServerCli" ^
--StopClass "org.apache.tika.server.TikaServerCli" ^
--StartMethod main ^
--StopMethod stop ^
--StartMode jvm  ^
--StopMode jvm ^
--StdOutput auto ^
--StdError auto ^
--Jvm "C:\Program Files\Java\jdk1.8.0_211\jre\bin\server\jvm.dll" ^
++StartParams -spawnChild 

Я создал MSI, который делает все это для вас: https://github.com/wbicode/TikaService-Installer (или вы можете установить установку самостоятельно: https://github.com/wbicode/TikaService).

Вам нужно будет создать отдельный класс, который реализует свой собственный класс start / stop (tika-server-XXjar находится в его classpath).

public class WinService {

  public static void start(String[] args) {
      Class<?> clazz = Class.forName("org.apache.tika.server.TikaServerCli");
      Method method = clazz.getMethod("main", String[].class);
      method.setAccessible(true);

      method.invoke(null, (Object)args.toArray(new String[0]));
  }

  public static void stop(String[] args) {
      System.out.println("stopping... TikaService");
      Runtime.getRuntime().exit(0);
  }
}

И он устанавливается с помощью этого скрипта (tika-server-XXjar находится внутри папки lib):

prunsrv.exe //IS//tika-daemon ^
    --DisplayName "Tika Daemon" ^
    --Classpath "%SERVICE_PATH%\TikaService.jar;%SERVICE_PATH%\lib\*" ^
    --StartMode java ^
    --StartClass "your.namespace.WinService" ^
    --StartMethod start ^
    --StopMode java ^
    --StopClass "your.namespace.WinService" ^
    --StopMethod stop ^
    --Description "Tika Daemon Windows Service" ^
Другие вопросы по тегам