【问题标题】:sd_notify() from Java来自 Java 的 sd_notify()
【发布时间】:2015-01-26 09:12:33
【问题描述】:

我有一个从systemd 的用户实例启动的Java 服务(使用Dropwizard 实现)。到目前为止,一切都很好。现在我想使用 systemd 的notification features 让它知道服务状态(可作为C library functionshell script 使用,但最终这两种方法都与环境变量引用的套接字对话)。我可以在服务完成启动后运行任意代码,但我不确定如何最好地从 Java 中通知 systemd。

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

【问题讨论】:

  • 由于通知功能需要本机代码,因此您需要使用 JNI 和/或 JNA。

标签: java service systemd


【解决方案1】:

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

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

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

【讨论】:

  • 好电话——我还没有找到更好的解决方案。我已经删除了你的链接,因为它实际上引用了这个问题的 SO 克隆副本。
  • 这个类使用了一些东西,分叉了一个子 systemd-notify 进程,这是出了名的不可靠。 There is a better way.
  • 我从@JdeBP 那里得到了答案,并把它变成了更通用的东西:gist.github.com/juur/048cc3d0554953b717e9c6867970f30e
猜你喜欢
  • 1970-01-01
  • 2011-04-11
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 2016-10-20
  • 2023-03-10
相关资源
最近更新 更多