2012-08-24 22 views
55

मुझे दो अनुप्रयोगों के बीच संवाद करने के लिए सर्वर में जावा जार चलाने की आवश्यकता है। मैंने इसे चलाने के लिए दो खोल स्क्रिप्ट लिखी हैं, लेकिन एक बार जब मैं उस स्क्रिप्ट को शुरू करता हूं तो मैं प्रक्रिया को बंद/समाप्त नहीं कर सकता। अगर मैं ctrl + सी दबाता हूं या कंसोल बंद करता हूं, तो सर्वर बंद हो जाएगा। क्या कोई मेरी मदद कर सकता है कि इस स्क्रिप्ट को सामान्य सर्वर के रूप में चलाने के लिए कैसे संशोधित करें?पृष्ठभूमि प्रक्रिया के रूप में सर्वर पर जावा जार फ़ाइल चलाएं

#!/bin/sh 
java -jar /web/server.jar 
echo $! 
#> startupApp.pid 

उत्तर

114

आप इस कोशिश कर सकते हैं:

#!/bin/sh 
nohup java -jar /web/server.jar & 

& प्रतीक, पृष्ठभूमि में चलाने के लिए कार्यक्रम स्विच करता है।

नोहुप उपयोगिता लॉग आउट करने के बाद भी पृष्ठभूमि में चलने वाले तर्क के रूप में आदेश को पारित करती है।

+0

धन्यवाद एंटोन, प्रक्रिया आईडी को मार कर सर्वर को रोक रहा हूँ। मुझे नहीं लगता कि यह सबसे अच्छा अभ्यास है। सर्वर को रोकने के लिए थ्री कमांड? –

+3

संक्षिप्त उत्तर: यह सर्वर पर निर्भर करता है। लंबा जवाब: जहां तक ​​मुझे पता है, इस तरह के सुंदर बंद करने का समर्थन करने की प्रक्रिया के बिना प्रक्रिया को बंद करने का कोई सुरक्षित तरीका नहीं है। उदाहरण के लिए, यदि यह एक बाहरी सर्वर द्वारा एक वेब सर्वर को समाप्त किया जा रहा है, तो हमेशा एक संभावना है कि कुछ अनुरोध खो जाएंगे। इस समस्या को हल करने का एक तरीका सर्वर में एक सुंदर समाप्ति समारोह को लागू करना है, उदा। एक विशेष प्रकार के अनुरोधों को संसाधित करके। फिर, सर्वर को उस विशेष प्रकार का अनुरोध भेजकर समाप्त कर दिया जा सकता है। अन्यथा, इसकी आईडी द्वारा प्रक्रिया को मारना एक आसान तरीका है। –

20

आप उबंटू का उपयोग कर और "कल का नवाब" है कर रहे हैं (http://upstart.ubuntu.com/).you यह कोशिश कर सकते हैं:

निम्नलिखित सामग्री के साथ /var/init/yourservice.conf

बनाएं

description "Your Java Service" 
author "You" 

start on runlevel [3] 
stop on shutdown 

expect fork 

script  
    cd /web 
    java -jar server.jar >/var/log/yourservice.log 2>&1 
    emit yourservice_running 
end script 

अब आप service yourservice start और service yourservice stop आदेश जारी कर सकते हैं। यह काम करने के लिए आप /var/log/yourservice.log पूंछ कर सकते हैं।

तुम सिर्फ यह कंसोल विंडो का अकेले बिना कंसोल से अपने जार चलाना चाहते हैं, तो आप सिर्फ कर सकते हैं:

java -jar /web/server.jar > /var/log/yourservice.log 2>&1 
+2

क्या यह एक व्यवस्थित सेवा है? यह प्रश्न लिनक्स टैग नहीं किया गया है, और बहुत कम distros डिफ़ॉल्ट रूप से systemd है। – jordanm

+1

मैं यह कहने के लिए प्रश्न में संशोधन करूंगा कि यह "अपस्टार्ट" का उपयोग कर रहा है जिसे उबंटू में शामिल किया गया है। – Strelok

+1

यदि आप पृष्ठभूमि में इसे चलाने के लिए चाहते हैं तो अंतिम सलाह के लिए मेरा विश्वास है और खोल जारी हो गई है, आपको यह करना चाहिए: 'जावा -jar /web/server.jar> /var/log/yourservice.log 2> और 1 & – Montaro

14

systemd जो अब distros

चरण 1 के बहुमत में चलता है:

अपने उपयोगकर्ता परिभाषित सेवाओं का पता लगाएं मेरा /usr/lib/systemd/system/ पर था

चरण 2:

एक पाठ फ़ाइल बनाएँ अपने पसंदीदा टेक्स्ट एडिटर के साथ इसे whatever_you_want.service

चरण 3:

रखें फाइल करने के लिए खाका निम्नलिखित whatever_you_want.service

[Unit] 
Description=webserver Daemon 

[Service] 
ExecStart=/usr/bin/java -jar /web/server.jar 
User=user 

[Install] 
WantedBy=multi-user.target 

चरण 4:

भागो आपकी सेवा
सुपर उपयोगकर्ता के रूप में

$ systemctl start whatever_you_want.service # starts the service 
$ systemctl enable whatever_you_want.service # auto starts the service 
$ systemctl disable whatever_you_want.service # stops autostart 
$ systemctl stop whatever_you_want.service # stops the service 
$ systemctl restart whatever_you_want.service # restarts the service