2009-07-07 3 views
5

के रूप में web.py चलाएं मेरे पास डेटा लोड करने के लिए एक सरल वेब.py प्रोग्राम है। सर्वर में मैं अपाचे या किसी भी वेबसर्वर को स्थापित नहीं करना चाहता हूं।डेमॉन

मैं http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/

और उपवर्गीकरण साथ एक पृष्ठभूमि सेवा के रूप में यह डाल करने के लिए प्रयास करें:

class Daemon: 
    def start(self): 
     """ 
     Start the daemon 
     """ 
     ... PID CHECKS.... 

     # Start the daemon 
     self.daemonize() 
     self.run() 
#My code 
class WebService(Daemon): 
     def run(self): 
      app.run() 

if __name__ == "__main__": 
    if DEBUG: 
     app.run() 
    else: 
     service = WebService(os.path.join(DIR_ACTUAL,'ElAdministrador.pid')) 
     if len(sys.argv) == 2: 
      if 'start' == sys.argv[1]: 
       service.start() 
      elif 'stop' == sys.argv[1]: 
       service.stop() 
      elif 'restart' == sys.argv[1]: 
       service.restart() 
      else: 
       print "Unknown command" 
       sys.exit(2) 
      sys.exit(0) 
     else: 
      print "usage: %s start|stop|restart" % sys.argv[0] 
      sys.exit(2) 

हालांकि, web.py सॉफ्टवेयर लोड नहीं (http://www.jejik.com/files/examples/daemon.py से) (यानी: सेवा नहीं सुन)

अगर मैं इसे सीधे कॉल करता हूं (यानी: डेमॉन कोड का उपयोग नहीं) ठीक काम करता है।

उत्तर

5

मुझे अंततः समस्या मिलती है।

कमांड लाइन से स्वीकार Web.py वैकल्पिक पोर्ट संख्या:

python code.py 80 

और स्क्रिप्ट भी कमांड लाइन से इनपुट ले:

python WebServer start 

तो web.py उपयोग करने का प्रयास बंदरगाह संख्या के रूप में "शुरू करें" और असफल। मुझे त्रुटि दिखाई नहीं दे रही क्योंकि बाकग्राउंड में था।

मैं एक मिनी हैक साथ इसे ठीक:

if __name__ == "__main__": 
    if DEBUG: 
     app.run() 
    else: 
     service = WebService(os.path.join(DIR_ACTUAL,'ElAdministrador.pid')) 
     if len(sys.argv) == 2: 
      if 'start' == sys.argv[1]: 
       sys.argv[1] = '8080' 
       service.start() 
0

मुझे नहीं लगता कि आप डेमॉन को चलाने के लिए कह रहे हैं। आपको एक MyDaemon ऑब्जेक्ट को तुरंत चालू करने और o.run() को कॉल करने की आवश्यकता है। ऐसा लगता है कि वेब सेवा केवल प्रारंभ होती है और आपके वेब ऐप पर सेवा इंटरफ़ेस को रोकती है, न कि वास्तविक वेब ऐप।

+0

मैं यह दिखाने के लिए प्रश्न अद्यतन करता हूं कि जब "प्रारंभ" कॉल को "रन" विधि कहा जाता है। – mamcx

+0

मैं अभी भी यह नहीं बता सकता कि कैसे सेवा (वेब ​​सेवा से) MyDaemon से कनेक्ट होती है, जब तक कि यह निहित न हो। – mcandre

+0

ओह, मेरी गलती :(। मैं सही कक्षा नाम (बुरा किट्टी कॉपी/पेस्ट!) रखना भूल गया – mamcx

0

उपयोग करने के बजाय दूसरा तर्क के ऊपर लिख द्वारा web.py शुरू कर सकते हैं जैसा आप यहां लिखा है:

if __name__ == "__main__": 
    if DEBUG: 
     app.run() 
    else: 
     service = WebService(os.path.join(DIR_ACTUAL,'ElAdministrador.pid')) 
     if len(sys.argv) == 2: 
      if 'start' == sys.argv[1]: 
       sys.argv[1] = '8080' 
       service.start() 

आप 'प्रारंभ | पुनरारंभ' पर दूसरे तर्क को हटा सकते हैं, जैसे:

if __name__ == "__main__": 
    if DEBUG: 
     app.run() 
    else: 
     service = WebService(os.path.join(DIR_ACTUAL,'ElAdministrador.pid')) 
     if len(sys.argv) == 2: 
      if 'start' == sys.argv[1]: 
       delete del sys.argv[1:2] 
       service.start() 

इस तरह, वेबपी को डिमन नियंत्रक को छोड़कर कमांड लाइन से पारित सभी तर्क प्राप्त होंगे। फिर आप आसानी से दौड़ सकते हैं:

python WebServer start 8080