来自Java的sd_notify()

And*_*ett 7 java service systemd

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

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

Jon*_*han 3

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

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

正如你所说,systemd 使用环境变量引用的套接字(代码中的 System.getenv("NOTIFY_SOCKET") ),所以我想可能还有一种使用 Java 套接字的方法,尽管我想了很多需要进行研究和/或反复试验。

  • 我从@JdeBP那里得到了答案,并将其变成了更通用的东西:https://gist.github.com/juur/048cc3d0554953b717e9c6867970f30e (4认同)
  • 这个类使用了一些东西,分叉了一个子“systemd-notify”进程,这是出了名的不可靠。[有更好的方法。](http://stackoverflow.com/a/36992645/340790) (2认同)