简体   繁体   English

Python3 创建守护进程

[英]Python3 create Daemon

I tried to create a Daemon in Python to run on an Ubuntu Server.我尝试在 Python 中创建一个守护进程以在 Ubuntu 服务器上运行。 The code below is the code I have problem with.下面的代码是我有问题的代码。

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

The error message I got when I run the code is the following:我运行代码时得到的错误信息如下:

 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.

Does anyone know how to fix this, or do you have a better way to create a Daemon in Python?有谁知道如何解决这个问题,或者您有更好的方法在 Python 中创建守护进程吗?

In my case this works with no errors:在我的情况下,这没有错误:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM