2014-11-27 9 views
5

Tôi có dịch vụ Java (được triển khai bằng cách sử dụng Dropwizard) mà tôi đang khởi chạy từ phiên bản người dùng systemd. Càng xa càng tốt. Bây giờ tôi muốn sử dụng system23's notification features để làm cho nó nhận thức được trạng thái dịch vụ (có sẵn như là C library function hoặc shell script nhưng cuối cùng cả hai phương pháp nói chuyện với một ổ cắm được tham chiếu bởi một biến môi trường). Tôi có thể chạy mã tùy ý khi dịch vụ đã hoàn tất khởi động, nhưng tôi không chắc cách tốt nhất để thông báo cho systemd từ bên trong Java.sd_notify() từ Java

Các nhà phát triển khác chạy dịch vụ này trên Windows, vì vậy điểm thưởng sẽ thực sự hữu ích nếu mã thông báo của tôi kín đáo và không gây ra bất kỳ đầu ra nào nếu không chạy với systemd.

+0

Vì tính năng thông báo đó yêu cầu mã gốc, bạn cần phải sử dụng JNI và/hoặc JNA. –

Trả lời

2

Tôi đã tìm thấy triển khai này sử dụng móc hệ thống, nhưng ít nhất không yêu cầu JNA/JNI.

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

Như bạn nói, systemd sử dụng ổ cắm tham chiếu bởi một biến môi trường (System.getenv ("NOTIFY_SOCKET") trong mã), vì vậy tôi muốn tưởng tượng cũng có thể có một cách để sử dụng một Java Ổ cắm, mặc dù tôi tưởng tượng rất nhiều nghiên cứu và/hoặc thử nghiệm và lỗi sẽ được yêu cầu.

+0

Cuộc gọi tốt - Tôi chưa tìm được giải pháp tốt hơn. Tôi đã loại bỏ liên kết của bạn, vì nó thực sự tham chiếu một bản sao của SO clone của câu hỏi này. –

+1

Lớp này sử dụng thứ gì đó, gây ra một quá trình 'systemd-notify' của trẻ em, điều đó nổi tiếng không đáng tin cậy. [Có một cách tốt hơn.] (Http://stackoverflow.com/a/36992645/340790) – JdeBP