2014-11-27 8 views
5

Ho un servizio Java (implementato utilizzando Dropwizard) che sto lanciando da un'istanza utente di systemd. Fin qui tutto bene. Ora vorrei usare il systemd notification features per renderlo consapevole dello stato del servizio (disponibile come C library function o shell script, ma alla fine entrambi i metodi parlano con un socket a cui fa riferimento una variabile di ambiente). Posso eseguire codice arbitrario quando il servizio ha terminato l'avvio, ma non sono sicuro di come sia meglio notificare systemd da Java.sd_notify() da Java

Altri sviluppatori eseguono questo servizio su Windows, quindi per i punti bonus sarebbe davvero utile se il mio codice di notifica fosse discreto e non causasse alcun output se non fosse in esecuzione con systemd.

+0

Poiché tale funzione di notifica richiede codice nativo, è necessario utilizzare JNI e/o JNA. –

risposta

2

Ho trovato questa implementazione che utilizza hook di sistema, ma almeno non richiede JNA/JNI.

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

Come dici tu, systemd usa socket a cui fa riferimento una variabile d'ambiente (System.getenv ("NOTIFY_SOCKET") nel codice), quindi mi immagino ci può anche essere un modo per utilizzare un Java Presa, anche se immagino che sarebbe necessaria molta ricerca e/o tentativi ed errori.

+0

Buona chiamata: devo ancora trovare una soluzione migliore. Ho rimosso il tuo link, poiché in realtà fa riferimento a una copia di questo clone di SO di questa domanda. –

+1

Questa classe usa qualcosa, forking un processo 'systemd-notify' figlio, che è notoriamente inaffidabile. [C'è un modo migliore.] (Http://stackoverflow.com/a/36992645/340790) – JdeBP