2012-08-23 35 views
10

मैं जावा डिमन लॉन्च करने के लिए मूल संकलित जेएसवीसी का उपयोग कर रहा हूं। मैं इसे ओपनएसयूएसई 32 बिट वीएम पर चला रहा हूं। कोड अपाचे के डिमन इंटरफ़ेस को लागू करता है, और मैं निम्न आदेश के साथ deamon निष्पादित कर रहा हूँ।अपाचे जेएसवीसी डिमन को रोकने में विफल रहता है

./jsvc -home jre -errfile logs/jsvc.err -pidfile daemon.pid -cp <my_classpath> com.loader.loaderservice.LoaderDaemon 

यह किसी समस्या के बिना शुरू होता है और चलता है। मैं डिमन को सामान्य उपयोगकर्ता और रूट के रूप में शुरू कर सकता हूं। हालांकि, जब मैं डिमन को समाप्त करने के लिए जाता हूं, तो जेएसवीसी स्टॉप कमांड जारी करने की बजाय प्रक्रिया को मार देता है।

./jsvc -stop -home jre -outfile logs/jsvc.err -errfile logs/jsvc.err -pidfile daemon.pid -cp <my_classpath> com.loader.loaderservice.LoaderDaemon 

डेमॉन प्रक्रिया मर जाता है, लेकिन इसके बंद चरणों में से किसी निष्पादित नहीं करता है (उदाहरण के लिए, यह लॉग इन करना चाहिए, DB में एक रिकार्ड, आदि निशान)। मैं लॉग/jsvc.err फ़ाइल में निम्न मिलता है, और यह किसी भी अन्य लॉग लिखना नहीं करता है:

Service exit with return value 143 

त्रुटि googling के बाद, मैं लोगों के एक मुट्ठी भर दिखाई दे रही है, जो सभी एक ही बात को देखा है , लेकिन मुझे कहीं भी एक अच्छा रिज़ॉल्यूशन नहीं मिल सकता है (http://mail-archives.apache.org/mod_mbox/commons-dev/200401.mbox/%[email protected]। es% 3E, http://www.tek-tips.com/viewthread.cfm?qid=1014679, http://threebit.net/mail-archive/tomcat-users/msg03832.html)।

अद्यतन: अपाचे की खिड़की की सेवा लांचर (procrun) मैं शुरू करने और बिना किसी समस्या के सेवा बंद करने में सक्षम हूँ का उपयोग करना। समस्या केवल जेएसवीसी संबंधित है, और केवल डेमॉन को रोकने पर।

अद्यतन 2: http://commons.apache.org/daemon/jsvc.html#Starting_jsvc पढ़ने अधिक ध्यान करने के बाद, मैंने देखा है कि बंद टैग मैं मुद्दों पर एक मार आदेश का उपयोग कर रहा हूँ पीआईडी ​​फ़ाइल मेरे द्वारा निर्दिष्ट के माध्यम से प्रक्रिया पी एन। ऐसा लगता है कि जेएसवीसी वास्तव में डिज़ाइन द्वारा डिमन को दृढ़ता से नहीं रोकता है। यह उस व्यवहार के अनुरूप है जो मैं देख रहा हूं, क्योंकि बहुत वर्बोज़ स्टॉप विधि किसी भी संदेश को लिख नहीं रही है।

-stop  stop the service using the file given in the -pidfile option 

नए सवाल:

  • मेरी जावा मुख्य अपाचे Daemon इंटरफ़ेस लागू किया है तो मैं कैसे एक चल डेमॉन पर 'स्टॉप' जारी करते हैं?
  • क्या मुझे जेएसवीसी के अलावा कुछ और चाहिए (ऐसा लगता है कि यह केवल डेमन शुरू करने या मारने के लिए उपयोगी है)?

उत्तर

5

आह, ठीक है। यह पता चला है कि जेएसवीसी स्टॉप कमांड सही तरीके से व्यवहार कर रहा था। मुझे इस तरह से खोदना पड़ा कि प्रक्रियाओं को लिनक्स/यूनिक्स में हत्या आदेश के माध्यम से समाप्ति संदेश प्राप्त होते हैं। जेएसवीसी डिमन पर एक हत्या -15 (जो नरम हत्या है) जारी करता है। यूनिक्स प्रक्रियाओं को संदेश प्राप्त करने के विवरण के लिए देखें: http://commons.apache.org/daemon/ और http://en.wikipedia.org/wiki/Kill_(command)।

असली मुद्दा डेमॉन के निर्माण में था। मेरी प्रारंभ विधि में, डिमन ने शट डाउन कमांड जारी किए जाने तक लूप किया, जिसने डेमॉन को डेमॉन बाल प्रक्रिया के रूप में नियंत्रण छोड़ने से रोका।

मैं इस किया था:

@Override 
public void start() 
{ 
    doStartWork(); 
    while (isAlive()) 
    { 
     Thread.sleep(1000); 
    } 
} 

मैं नीचे पड़ा है चाहिए, तो मैं लौट सकते हैं और डेमॉन धागा ओएस से संकेतों को प्राप्त करने के लिए अनुमति दे सकता है। http://commons.apache.org/daemon/jsvc.html#How_jsvc_works देखें, नीचे सेक्शन अनुभाग: 'नियंत्रित प्रक्रिया:'

@Override 
public void start() 
{ 
    doStartWork(); 
}