简体   繁体   English

守护程序后如何记录stdout?

[英]How did I log stdout after daemonize?

I successfully daemonize my python code by using Sander Marechal's code sample . 我通过使用Sander Marechal的代码示例成功地守护了我的python代码。 Now I want to log stdout to logfile but failed. 现在我想将stdout登录到日志文件,但是失败了。 How did I log stdout after daemonize? 守护程序后如何记录stdout? Here is my code: 这是我的代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import zerorpc, zmq
import os, sys, time
from daemon import Daemon

class RunTestCase(zerorpc.Subscriber):
    def __init__(self, domain, *args, **kwargs):
        super(RunTestCase, self).__init__(*args, **kwargs)
        self.domain = domain

    def add(self, domain, testcase_pk, testresult_pk):
        print domain,  testcase_pk, testresult_pk
        if domain == self.domain:
           print "NAT Got it"

class subscriberd(Daemon):
    domain = ""
    def run(self):
        # Start RPC Server
        s = RunTestCase(self.domain)
        s._events.setsockopt(zmq.TCP_KEEPALIVE, 1)
        s.connect("tcp://192.168.77.170:8888")
        s.run()

if __name__ == "__main__":
    daemon = subscriberd('/tmp/subscriber.pid', stdout='/tmp/subscriber.log')
    #I add stdout here but /tmp/subscriber.log still empty after test. 
    daemon.domain = sys.argv[1]

    if len(sys.argv) == 3:
        if 'start' == sys.argv[2]:
            daemon.start()
        elif 'stop' == sys.argv[2]:
            daemon.stop()
        elif 'restart' == sys.argv[2]:
            daemon.restart()
        else:
            print "Unknown command"
            sys.exit(2)
        sys.exit(0)
    else:
        print "usage: %s domain start|stop|restart" % sys.argv[0]
        print "ex: %s KS-1 start" % sys.argv[0]
        sys.exit(2)

This is what i do 这就是我所做的

import io, sys

# Redirect stdout to a file inside daemon
if not foreground:
    # Make it possible to get output what daemonized IPython is doing
    sys.stdout = io.open("notebook.stdout.log", "wt")
    sys.stderr = io.open("notebook.stderr.log", "wt")

Full example: 完整示例:

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

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