2016-05-30 12 views
4

Привет, Я пытаюсь создать Daemon в python для запуска на сервере Ubuntu. Код ниже - это код, с которым я столкнулся.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() 

Сообщение об ошибке я получил, когда я запускаю код выглядит следующим образом:

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. 

Кто-нибудь знает, как это исправить, или у вас есть лучший способ, чтобы создать демона в Python?

+0

Как вы получаете сообщение об ошибке? –

+0

Я запускаю команду 'Python3 main.py start' –

+0

Имеет ли это отношение к тому, что'/dev/null' не доступен для поиска? – Tico

ответ

0

мой случай:

# 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) 

тогда без ошибок!

+0

В StackOverflow отказываются отвечать только на код. Пожалуйста, попробуйте уточнить, почему это правильный ответ – Mittal