2011-12-20 14 views
10

मैं शुरू रोकने के डेमॉन के साथ अजगर स्क्रिप्ट शुरू करने के लिए कोशिश कर रहा हूँ:शुरू-स्टॉप-डेमॉन और अजगर

sudo /sbin/start-stop-daemon --start --pidfile /home/loop.pid \ 
--user www-data --group www-data -b --make-pidfile --chuid www-data \ 
--exec /usr/bin/python /home/loop.py --verbose 

लेकिन मेरे प्रक्रियाओं में कोई अजगर स्क्रिप्ट। मैं क्या गलत करता हूँ?

loop.py:

import time 
while True: 
    print "working..." 
    time.sleep(3) 
+0

आप पीआईडी ​​फ़ाइल मिलता है? – chrisaycock

उत्तर

3

मैं अपनी स्क्रिप्ट और कमांड लाइन करने की कोशिश की, और यह मेरी मशीन पर काम कर रहा है। क्या आप वाकई /home/loop.py पर स्थित हैं?

इसके अलावा, उन प्रिंटों को देखने की अपेक्षा न करें, क्योंकि आप -b (पृष्ठभूमि) विकल्प निर्दिष्ट कर रहे हैं, इसलिए प्रक्रिया को आपके टर्मिनल से अलग किया जा रहा है। प्रयोजनों के परीक्षण के लिए -b बिना यह चलाने की कोशिश करें और फिर आप -stdout विकल्प के साथ एक लॉगफ़ाइल को मानक आउटपुट अनुप्रेषित कर सकते हैं: सीधे

sudo /sbin/start-stop-daemon --start --pidfile /home/loop.pid \ 
--user www-data --group www-data -b --make-pidfile --chuid www-data \ 
--exec /usr/bin/python /home/loop.py --verbose -stdout /var/log/loop.log 
+0

यह रीबूट के बाद मेरे लिए काम शुरू करता है, मुझे नहीं पता क्यों) मेरे पास उबंटू 11.10 है और ऐसा लगता है कि स्टार्ट-स्टॉप-डिमन के इस संस्करण में कोई स्टडआउट विकल्प नहीं है। मैंने intresting विकल्प देखा "-R | --retry जांचें कि क्या प्रक्रियाएं मरती हैं, और पुनः प्रयास करें।" पूर्व में अगर मैं अपनी स्क्रिप्ट को मारता हूं तो यह फिर से शुरू होगा? लेकिन मैं समझ नहीं पा रहा हूं कि मेरे उदाहरण में इस विकल्प का उपयोग कैसे करें? – evg

+0

अजीब, लेकिन आप सही हैं। फिर आपको खुद को पाइथन लिपि से stdout लिखना होगा: 'आयात sys; sys.stdout.write (STRING) के '। – Chewie

0

बजाय कार्यकारी अजगर, यदि आप --exec (या --startas) एक नेस्टेड खोल, तो आप रीडायरेक्शन नहीं में (के रूप में प्रति this answer) कर सकते हैं:

start-stop-daemon --start --quiet --chuid $DAEMONUSER \ 
--make-pidfile --pidfile $PIDFILE --background  \ 
--startas /bin/bash -- -c "exec $DAEMON $DAEMON_ARGS > /var/log/some.log 2>&1" 

यह मेरे लिए काम करता है और काफी खुशी से मेरी अजगर stdout लॉग एक बार मुझे एहसास हुआ कि उत्पादन बफ़र गया था (मेरी स्क्रिप्ट नहीं था ' टी बहुत ज्यादा लिखना)! मैं तो this article जो उत्पादन डिफ़ॉल्ट की तुलना में अधिक उत्सुकता को फ्लश करने के लिए 'stdbuf' का उपयोग करता पाया (और यह भी बताते हैं बहुत अच्छी तरह से):

start-stop-daemon --start --background \ 
      --pidfile $PIDFILE --make-pidfile --startas /bin/bash \ 
      -- -c "exec stdbuf -oL -eL $DAEMON $DAEMONARGS > $LOGFILE 2>&1"