सेवा (मूक) के रूप में एक कार्यक्रम कैसे चलाएं?


23

मेरे पास एक अजगर आधारित सर्वर है जो मैं टर्मिनल से शुरू करता हूं। टर्मिनल का यह विशेष उदाहरण तब प्रोग्राम को नियंत्रण देता है, और प्रोग्राम इसे एक प्रकार की लॉगिंग विंडो के रूप में उपयोग करता है, जब तक कि यह बंद न हो जाए। क्या यह सामान्य है, या मुझे किसी तरह कार्यक्रम शुरू करने का प्रयास करना चाहिए जिसमें यह एक सक्रिय प्रक्रिया के रूप में दिखाई देगा? यदि मैं उस टर्मिनल को बंद कर देता हूं जहां से मैंने कार्यक्रम शुरू किया है, तो कार्यक्रम इसके साथ मर जाता है।

धन्यवाद


इस उत्तर में PHP का उल्लेख किया गया है, लेकिन यह पायथन पर भी लागू होता है: askubuntu.com/questions/26555/running-php-cli-server/…

जवाबों:


9

यहां तक ​​कि पुराने बैश पृष्ठभूमि को प्रक्रियाएं भेजने के लिए उपयोग कर रहे हैं, लेकिन कुछ अन्य तरीके भी हैं .. लेकिन मूल दो ये हैं:

1.)$~ your_command > outputfile_for_stdout &
        # runs your command in background, giving you only PID so you can exit that process by `kill -9 PID_of_process`
        # & goes at the end of row      


2.)$~ your_command > outputfile_for_stdout 
        # this will run your program normally
        # press  Ctrl + Z then program will pause
   $~ bg
        # now your program is running in background
   $~ fg
        # now your program came back to foreground
3.)you can run terminal window under screen command so it will live until you either kill it or you reboot your machine
   $~ screen
   $~ run_all_your_commands
       # Ctrl + A + D will then detach this screen
   $~ screen -r will reattach it

कुछ अन्य उपयोगी कमांड:

   $~ jobs
        # will show you all processes running right now, but without PID
   $~ ps
        # will show you all processes for actual terminal window

हम्म, मैं अब तक की प्रक्रियाओं को देखने के लिए कमांड 'टॉप' का उपयोग कर रहा था
U2ros

महान समाधान। क्या 1. विकल्प को संशोधित करने का तरीका है ताकि फ़ाइल में पीआईडी ​​सहेजा जाए। तो एक लॉग फ़ाइल और एक पीआईडी ​​फ़ाइल उत्पन्न होती है।
ओगुज़ बिलगिक

27

इसे एक डेमन (सेवा) में बदल दें
daemon --name="yourservicename" --output=log.txt sh yourscript.sh


7
$ servicename &

&प्रोग्राम को समाप्त होने तक शेल को ब्लॉक करने के बजाय बैकग्राउंड में प्रोग्राम को चलाने का कारण बनता है।


नहीं, यह नहीं है। उदाहरण के लिए। dixon@dixon-vaio:~$ nautilus & [1] 11835। यह प्रोसेस आईडी लौटाता है और आप नए शेल प्रांप्ट करेंगे। इसे भी देखें: http://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and
dixoncx

1
मुझे सही साबित होना है। डाउन वोट हटाया गया।
स्कॉट सेवेरेंस


0

टर्मिनल से आप चला सकते हैं screenया आप के साथ आदेश का पालन कर सकते हैं &। निरंतर प्रक्रियाओं को चलाने का आसान तरीका।


&इस मामले में प्रक्रिया की पृष्ठभूमि का उपयोग करते हुए , मेरी राय में यह बहुत कम है। ओपी कहता है कि उसका सर्वर स्टडआउट में प्रवेश करता है, इसलिए &उसका टर्मिनल आउटपुट के साथ बंद हो जाएगा। चूंकि ओपी टर्मिनल को बंद करने का उल्लेख करता है , इसलिए ओपी फिर से प्रक्रिया को आगे नहीं बढ़ा सकेगा और सभी लॉग-आउटपुट खो जाएंगे। बेहतर है, कम से कम, इसे एक लॉग फ़ाइल में रीडायरेक्ट करने या screenसेटअप के साथ रहने के लिए - लेकिन फिर screenओपी की मूल बातें (डिटैच / अटैच / इत्यादि) को स्पष्ट करें
रॉबर्ट रिडेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.