2016-05-30 11 views
4

Hallo Ich versuche, einen Daemon in Python auf einem Ubuntu-Server zu erstellen. Der folgende Code ist der Code, mit dem ich ein Problem habe.Python3 create Daemon

import sys 
import time 
import threading 
import logging 
import logging.handlers 

from daemon import runner 

class Main(object): 
    def run(self): 
     my_logger = logging.getLogger('NameGeneratorDeamon') 
     my_logger.setLevel(logging.DEBUG) 
     handler = logging.handlers.SysLogHandler(address=('192.168.0.69', 514),facility=LOG_DAEMON) 
     my_logger.addHandler(handler) 
     try: 
      my_logger.info('Started') 
      while True: 
       pass 
     except Exception as inst: 
      #Send error to syslog server 
      my_logger.critical(inst) 

class App(): 
    def __init__(self): 
     self.stdin_path = '/dev/null' 
     self.stdout_path = '/dev/null' 
     self.stderr_path = '/dev/null' 
     self.pidfile_path = '/tmp/foo.pid' 
     self.pidfile_timeout = 5 
    def run(self): 
     service = Main() 
     service.run() 

app = App() 
daemon_runner = runner.DaemonRunner(app) 
daemon_runner.do_action() 

Die Fehlermeldung habe ich, wenn ich den Code ausführen ist die folgende:

File "Main.py", line 35, in <module> 
    daemon_runner = runner.DaemonRunner(app) 
    File "/usr/local/lib/python3.4/dist-packages/daemon/runner.py", line 111, in __init__ 
    self.daemon_context.stdout = open(app.stdout_path, 'w+t') 
io.UnsupportedOperation: File or stream is not seekable. 

Wer weiß, wie dies zu beheben, oder haben Sie einen besseren Weg, um einen Daemon in Python zu erstellen?

+0

Wie erhalten Sie den Fehler? –

+0

Ich führe den Befehl 'Python3 main.py start' –

+0

Hat es mit der Tatsache zu tun, dass'/dev/null' nicht suchbar ist? – Tico

Antwort

0

meinem Fall:

# vi /usr/local/lib/python3.5/dist-packages/daemon/runner.py 
# 118 -120 
     self.daemon_context = DaemonContext() 
     self.daemon_context.stdin = open(app.stdin_path, 'wb+',buffering=0) 
     self.daemon_context.stdout = open(app.stdout_path, 'wb+',buffering=0) 
     self.daemon_context.stderr = open(
       app.stderr_path, 'wb+', buffering=0) 

dann keine Fehler!

+0

Code only-Antworten werden in StackOverflow nicht empfohlen. Bitte versuchen Sie ein wenig zu erläutern, warum dies eine korrekte Antwort ist – Mittal