के साथ डेमोनाइजिंग प्रक्रिया मैं 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)
देता है और यह पता लगाने प्रतीत होता है सदा जब तक प्रक्रिया जबरदस्ती मार दिया जाता है। वह लॉकफाइल फ़ंक्शंस को वास्तव में मौजूदा लॉक फ़ाइल की उपस्थिति का पता चला है लेकिन समस्या यह है कि प्रोग्राम बाहर नहीं निकलता है। इसके अलावा मैं यह त्रुटि प्रदर्शित करना चाहूंगा कि पीआईडी फाइल पहले से मौजूद है।
यह कैसे किया जा सकता है?
मैंने दूसरे दृष्टिकोण की कोशिश की और इसे और भी बदतर परिणाम दिए गए। कार्यशील निर्देशिका में कोई पिड फ़ाइल नहीं है और यह अभी भी इसके अस्तित्व के बारे में शिकायत कर रही है! मैंने स्ट्रेस – auny
स्ट्रेस के माध्यम से पुष्टि की है "ओपन (" test.pid ", O_WRONLY | O_CREAT | O_EXCL, 0644) = -1 EEXIST (फ़ाइल मौजूद है)" – auny