2009-01-02 19 views
7

Tôi có một ứng dụng Java, để bắt đầu nó tôi sử dụngLàm thế nào để chuyển đổi một ứng dụng Java hiện có để một dịch vụ SYS V (daemon)

java -jar myapp.jar

Để ngăn chặn nó Tôi sử dụng CTRL + C.

Bây giờ tôi cần phải chuyển đổi ứng dụng một cái gì đó mà tôi có thể bắt đầu với:

/etc/init.d/myapp bắt đầu

Và tôi có thể dừng lại ở:

/etc/init.d/myapp stop

Vấn đề tôi s tất cả về tiết kiệm PID của quá trình, tôi nghĩ rằng tôi thấy một nơi nào đó một công thức để làm điều này, tôi không nhớ nơi và tôi không thể tìm thấy nó.

Tôi thấy rằng có một dự án được gọi là Java Server Wrapper, nhưng tôi tìm một cái gì đó miễn phí không giới hạn mức sử dụng bộ nhớ. Và tôi nghĩ rằng công việc này có thể được thực hiện trong một kịch bản bash duy nhất.

+0

Bạn có ý nghĩa gì bởi "không giới hạn mức sử dụng bộ nhớ"? Việc sử dụng bộ nhớ JVM của Sun luôn bị giới hạn (nếu bạn không chỉ định -Xmx, có * là * giá trị mặc định). – alex

+0

@alex, Có lẽ tôi không hiểu chính xác trang này http://wrapper.tanukisoftware.org/doc/english/prop-java-maxmemory.html#percent –

+0

Andrea: Sun JVM luôn có giới hạn bộ nhớ. Nếu bạn không đặt nó một cách rõ ràng, nó là 64m. Vì 64m không nhiều, bạn thường muốn tự mình thay đổi giá trị này. Có vẻ như Java Service Wrapper có thể thiết lập giới hạn này bằng cách sử dụng phần trăm, và không chỉ giá trị tuyệt đối, như trường hợp thông thường. –

Trả lời

10

Hãy xem Apache Commons Daemon.

Trình khởi chạy 'jsvc' hỗ trợ khởi động và dừng các trình nền (dịch vụ) dựa trên java.

7

Thứ nhất, tiết kiệm các PID trên * nix: bây giờ

$ ./yourprogram & 
$ echo $! > /var/run/yourpid 

yourpid sẽ chứa yourpgram là PID, và/var/run là nơi thích hợp để đặt nó.

Ở trên có thể được đặt trong tập lệnh "bắt đầu" của bạn. Tập lệnh "dừng" có thể xem yourpid để biết phải giết gì.

Nếu bạn muốn thanh lịch hơn và dừng ứng dụng của mình đúng cách, bạn có thể xem mã nguồn cho org.apache.catalina.startup.Catalina.java của Tomcat về cách triển khai móc tắt máy thích hợp.

Thứ hai, trên "stop" và "bắt đầu" kịch bản sau đó có thể được đưa vào /etc/init.d/mystopstartscript:

#!/bin/bash 
# processname: yourprogram 
# pidfile: /var/run/yourpid 

case $1 in 
start) 
     sh /some/where/start.sh 
     ;; 
stop) 
     sh /some/where/stop.sh 
     ;; 
restart) 
     sh /some/where/stop.sh 
     sh /some/where/start.sh 
     ;; 
esac 
exit 0 

Đây là một giải pháp khá cây nhà lá vườn, với những ý tưởng chủ yếu lấy từ tốt 'ol Tomcat, nhưng tôi hy vọng nó sẽ giúp :)

Các vấn đề liên quan