2014-11-27 2 views
5

У меня есть служба Java (реализована с использованием Dropwizard), которую я запускаю из пользовательского экземпляра systemd. Все идет нормально. Теперь я хотел бы использовать systemd's notification features, чтобы информировать его о состоянии службы (доступно как C library function или shell script, но в конечном итоге оба метода общаются с сокетом, на который ссылается переменная среды). Я могу запустить произвольный код, когда служба завершила запуск, но я не уверен, как лучше всего уведомлять systemd из Java.sd_notify() из Java

Другие разработчики запускают эту службу в Windows, поэтому для бонусных очков было бы действительно полезно, если бы мой код уведомления был сдержанным и не вызывал никакого выхода, если не работает с systemd.

+0

Поскольку для этой функции уведомления требуется собственный код, вам необходимо использовать JNI и/или JNA. –

ответ

2

Я нашел эту реализацию, которая использует системные перехватчики, но по крайней мере не требует JNA/JNI.

https://gist.github.com/yrro/18dc22513f1001d0ec8d

Как вы говорите, Systemd использует сокеты, на которые ссылается переменная окружения (System.getenv («NOTIFY_SOCKET») в коде), так что я предполагаю, что также может быть способом использовать Java Socket, хотя я бы предположил, что потребуется много исследований и/или проб и ошибок.

+0

Хороший звонок - мне еще предстоит найти лучшее решение. Я удалил вашу ссылку, так как она действительно ссылается на копию этого клонирования SO. –

+1

Этот класс использует что-то, открывая дочерний процесс 'systemd-notify', который, как известно, ненадежный. [Есть лучший способ.] (Http://stackoverflow.com/a/36992645/340790) – JdeBP

 Смежные вопросы

  • Нет связанных вопросов^_^