来自Java的sd_notify()

我有一个Java服务(使用Dropwizard实现),我从systemd的用户实例启动。 到现在为止还挺好。 现在我想使用systemd的通知function使其了解服务状态(可用作C库函数或shell脚本,但最终两种方法都与环境变量引用的套接字通信)。 我可以在服务启动完成后运行任意代码,但我不确定如何最好地从Java中通知systemd。

其他开发人员在Windows上运行此服务,因此对于奖励积分,如果我的通知代码是谨慎的并且如果没有使用systemd运行则不会导致任何输出,那将非常有用。

我发现这个实现使用系统挂钩,但至少不需要JNA / JNI。

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

正如你所说,systemd使用环境变量引用的套接字(代码中的System.getenv(“NOTIFY_SOCKET”)),所以我想也可能有一种使用Java Socket的方法,虽然我想象很多研究和/或反复试验将是必需的。