2014-11-27 6 views
5

systemd kullanıcı örneğinden başlattığım bir Java hizmetim var (Dropwizard kullanılarak uygulanır). Çok uzak çok iyi. Şimdi, hizmet durumunu (C library function veya shell script olarak kullanılabilir ancak sonunda her iki yöntem de bir ortam değişkeni tarafından başvurulan bir soketle konuştuğunu) bildirmek için systemd notification features'u kullanmak istiyorum. Hizmetin başlatılması bittiğinde rasgele kod çalıştırabilirim, ancak Java’nın içinden systemd’i en iyi nasıl bilgilendireceğimi bilmiyorum.sd_notify(), Java

Diğer geliştiriciler Windows'ta bu hizmeti çalıştırır; bu nedenle, bonus puanları için, bildirim kodumun açık olması ve systemd ile çalışmazsa herhangi bir soruna neden olmaması çok yararlı olur.

+0

Bu bildirim özelliği yerel kod gerektirdiğinden, JNI ve/veya JNA kullanmanız gerekir. –

cevap

2

Sistem kancalarını kullanan bu uygulamayı buldum, ancak en azından JNA/JNI gerektirmiyor. Dediğiniz gibi

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

, systemd bir ortam değişkeni (kodunda System.getenv ("NOTIFY_SOCKET")) tarafından başvurulan yuva kullanır, bu yüzden de bir Java kullanmak için bir yol olabilir hayal ediyorum Soket, bir sürü araştırma ve/veya deneme-yanılma gerektireceğini düşünmeme rağmen.

+0

İyi bir çağrı - Daha iyi bir çözüm bulamadım. Bağlantınızı kaldırdım çünkü aslında bu sorunun bir kopyasını deniyor. –

+1

Bu sınıf, bir çocuk 'systemd-bildirme 'sürecini geçersiz kılan bir şeyi kullanır, ki bu çok güvenilir değildir. [Daha iyi bir yol var.] (Http://stackoverflow.com/a/36992645/340790) – JdeBP