我有一个Java服务(使用Dropwizard实现),我将从systemd的用户示例启动它。到目前为止一切顺利。现在,我希望使用systemd的notification features来使它了解服务状态(可作为C library function或shell script使用,但最终两种方法都与环境变量引用的套接字通信)。我可以在服务完成启动时运行任意代码,但我不确定如何最好地从Java内部通知systemd。
其他开发人员在Windows上运行此服务,因此如果我的通知代码谨慎,并且在不与systemd一起运行时不会导致任何输出,那么它将非常有用。
2条答案
按热度按时间xzv2uavs1#
我发现这个实现确实使用了系统钩子,但至少不需要JNA/JNI。
https://gist.github.com/yrro/18dc22513f1001d0ec8d
正如您所说,systemd使用由环境变量(代码中的System.getenv(“NOTIFY_SOCKET”))引用的套接字,因此我认为也可能有一种使用Java套接字的方法,尽管我认为这需要大量的研究和/或反复试验。
cpjpxq1n2#
有Java + JNI实现:
https://github.com/faljse/SDNotify
Notify协议使用数据报unix套接字,其不能通过Java访问;因此,SDNotify包含套接字API的JNA Package 器。