Я получил файл JAR, который должен работать как демон в MacOS Sierra, и я решил использовать Apache Commons Daemon и JSVC для этой цели.Я знаю, что, возможно, JSVC на самом деле не нужен для этой цели (кажется, он позволяет открывать порты только в низком диапазоне), и можно добиться того же с помощью системы / запуска, так что любая помощь / решение с JSVC или без него приветствуется.
Вот так я запускаю флягу из командной строки, и она работает правильно.Он открывает соединение WebSocket через порт 8085 и ожидает входящего соединения.Затем он подключается к устройству чтения смарт-карт и получает некоторые данные с карты.
java -cp "myjar.jar:jars/*" full_class_name
Теперь, когда я пытаюсь запустить тот же файл с интерфейсом Apache Commons Daemon и JSVC, файл запускается правильно ион начинает прослушивать через порт 8085.
./jsvc -debug -cp commons-daemon-1.1.0.jar:myjar.jar:jars/* -cwd . -pidfile /tmp/file.pid full_class_name
Проблема в том, что по какой-то причине возникает исключение при попытке подключения к считывателю смарт-карт.
INFORMACIÓN: WebSocket Registered apps: URLs all start with ws://localhost:8085
may 15, 2018 10:04:37 AM org.glassfish.tyrus.server.Server start
INFORMACIÓN: WebSocket server started.
LISTENING
Daemon started successfully
java_start done
Waiting for a signal to be delivered
create_tmp_file: /tmp/541.jsvc_up
jnasmartcardio.Smartcardio$EstablishContextException: jnasmartcardio.Smartcardio$JnaPCSCException: SCardEstablishContext got response 0x8010001d (SCARD_E_NO_SERVICE: The Smart card resource manager is not running.)
at jnasmartcardio.Smartcardio$JnaTerminalFactorySpi.engineTerminals(Smartcardio.java:81)
at javax.smartcardio.TerminalFactory.terminals(TerminalFactory.java:351)
at apdu4j.TerminalManager.getTheReader(TerminalManager.java:228)
at com.st.middleware.a.a.b.connect(SourceFile:24)
at com.st.middleware.a.b.connect(SourceFile:18)
at com.st.middleware.a.b.getCertificates(SourceFile:1024)
at com.st.middleware.MiddlewareImpl.a(SourceFile:113)
at com.st.middleware.MiddlewareImpl.getAuthCertificates(SourceFile:151)
at com.st.communication.card.websocket.a.handleMessage(SourceFile:79)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
Фактто, что jar работает правильно при работе с java -jar, заставляет меня поверить, что проблема связана с конфигурацией.Любые идеи о том, почему услуга не доступна с помощью JSVC?
Заранее спасибо.