2013-06-20 7 views
5

के साथ डेमोनाइजिंग प्रक्रिया मैं daemon मॉड्यूल का उपयोग कर प्रक्रिया को डिमननाइज़ करने का प्रयास कर रहा हूं। कोड इस तरह कुछपायथन: पीआईडी ​​फ़ाइल

import sys 
import time 
import daemon 
import lockfile 


def do_things(): 
    while True: 
     print "hello" 
     time.sleep(3) 

def main() 
    context = daemon.DaemonContext(stdout=sys.stdout, 
            pidfile=lockfile.FileLock('test.pid')) 

    with context: 
     do_things() 

अब यहां आप देखते हैं कि मैं लॉक पीआईडी ​​फ़ाइल बना रहा हूं। अब मैं इस कार्यक्रम को चलाता हूं और यह ठीक चलता है। अब, पीआईडी ​​/ डेमॉन कार्यक्षमता मैं

python test.py 

का उपयोग कर अब इस बार यह नहीं चलाना चाहिए कार्यक्रम का एक और उदाहरण शुरू परीक्षण करने के लिए के रूप में एक पूर्व उदाहरण पहले से ही चल रहा है। यह पता चला है कि दूसरा उदाहरण एक लूप में शुरू होता है और हो जाता है (यह मेरे परीक्षण फ़ंक्शन में while लूप नहीं है)। इस 2 उदाहरण पर strace चल रहा है निम्न उत्पादन लगातार

stat("/some-path-here/[email protected]", {st_mode=S_IFREG|0666, 
st_size=0, ...}) = 0 
select(0, NULL, NULL, NULL, {0, 100000}) = 0 (Timeout) 

link("/some-path-here/[email protected] 4e1a9720.21520", 
"/somepath/test.pid.lock") = -1 EEXIST (File exists) 

देता है और यह पता लगाने प्रतीत होता है सदा जब तक प्रक्रिया जबरदस्ती मार दिया जाता है। वह लॉकफाइल फ़ंक्शंस को वास्तव में मौजूदा लॉक फ़ाइल की उपस्थिति का पता चला है लेकिन समस्या यह है कि प्रोग्राम बाहर नहीं निकलता है। इसके अलावा मैं यह त्रुटि प्रदर्शित करना चाहूंगा कि पीआईडी ​​फाइल पहले से मौजूद है।

यह कैसे किया जा सकता है?

उत्तर

2

नोट: यह उत्तर मानता है कि आप python-daemon लाइब्रेरी का उपयोग कर रहे हैं।

डेमॉन लाइब्रेरी एक सहायक वर्ग daemonDaemonRunner के साथ आता है जो पिड फ़ाइल बनाने में संभालती है। उस के आंतरिक भाग को देखते हुए, यह daemon.pidfile.TimeoutPIDLockFile लॉकफ़ाइल के प्रकार के रूप में उपयोग करता है।

इसलिए, यह आप या तो द्वारा इस का समाधान हो सकता की तरह दिखता है:

  • उपयोग daemon.DaemonRunner एक daemon.pidfile.TimeoutPIDLockFile को pidfile के प्रकार (हम यह बहुत उपयोग करने के लिए सुविधाजनक पाया है)
  • बदलें।
+0

मैंने दूसरे दृष्टिकोण की कोशिश की और इसे और भी बदतर परिणाम दिए गए। कार्यशील निर्देशिका में कोई पिड फ़ाइल नहीं है और यह अभी भी इसके अस्तित्व के बारे में शिकायत कर रही है! मैंने स्ट्रेस – auny

+0

स्ट्रेस के माध्यम से पुष्टि की है "ओपन (" test.pid ", O_WRONLY | O_CREAT | O_EXCL, 0644) = -1 EEXIST (फ़ाइल मौजूद है)" – auny

संबंधित मुद्दे