Настройка для службы 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" ^