Python 守护进程意外死亡

Python 守护进程意外死亡,python,daemon,Python,Daemon,我有一个python脚本,我使用下面的代码对其进行后台监控 def daemonise(): from os import fork, setsid, umask, dup2 from sys import stdin, stdout, stderr if fork(): exit(0) umask(0) setsid() if f

我有一个python脚本,我使用下面的代码对其进行后台监控

        def daemonise():
            from os import fork, setsid, umask, dup2
            from sys import stdin, stdout, stderr

            if fork(): exit(0)
            umask(0) 
            setsid() 
            if fork(): exit(0)

            stdout.flush()
            stderr.flush()
            si = file('/dev/null', 'r')
            so = file('daemon-%s.out'%os.getpid(), 'a+')
            se = file('daemon-%s.err'%os.getpid(), 'a+')
            dup2(si.fileno(), stdin.fileno())
            dup2(so.fileno(), stdout.fileno())
            dup2(se.fileno(), stderr.fileno())
            print 'this file has the output from daemon%s'%os.getpid()
            print >> stderr, 'this file has the errors from daemon%s'%os.getpid()
剧本已经完成了

while True: try: funny_code(); sleep(10); except:pass;
循环。它正常运行了几个小时,然后意外死亡。我如何调试这样的恶魔,错误守护进程

[编辑]


如果不启动像monit这样的进程,有没有办法用python编写一个看门狗,它可以监视我的其他守护进程并在它们停止时重新启动?谁看看门狗。

我在客户身上使用的是。它是一个经过验证、经过良好测试的工具,可以运行任何daemonized

您只需编写应用程序而无需任何后台处理,即可在前台运行;然后为它创建一个daemontools服务文件夹,从现在起,每次系统重新启动时,它都会发现并自动重新启动应用程序


它还可以处理日志旋转和其他操作。节省了大量繁琐的重复工作。

我在客户中使用的是。它是一个经过验证、经过良好测试的工具,可以运行任何daemonized

您只需编写应用程序而无需任何后台处理,即可在前台运行;然后为它创建一个daemontools服务文件夹,从现在起,每次系统重新启动时,它都会发现并自动重新启动应用程序


它还可以处理日志旋转和其他操作。节省了大量繁琐的重复工作。

为什么要默默地接受所有异常?尝试查看此操作捕获了哪些异常:

while True:
    try:
        funny_code()
        sleep(10)
    except BaseException, e:
        print e.__class__, e.message
        pass
一些意想不到的事情可能会发生,导致它失败,但是如果你盲目地忽略所有的异常,你永远不会知道


我建议使用Python编写的,非常容易用于后台监控和监视进程。在supervisord下运行时,您不必使用daemonise功能。

为什么要默默地接受所有异常?尝试查看此操作捕获了哪些异常:

while True:
    try:
        funny_code()
        sleep(10)
    except BaseException, e:
        print e.__class__, e.message
        pass
一些意想不到的事情可能会发生,导致它失败,但是如果你盲目地忽略所有的异常,你永远不会知道


我建议使用Python编写的,非常容易用于后台监控和监视进程。在supervisord下运行时,您不必使用daemonise函数。

您确实应该使用它,它是一个为标准守护进程进程库实现的库。通过这种方式,您将确保应用程序在任何类型的UNIX下都能正常运行。无需重新发明轮子。

您确实应该使用它,它是一个为标准守护进程进程库实现的库。通过这种方式,您将确保应用程序在任何类型的UNIX下都能正常运行。无需重新发明轮子。

我可能会添加一些类似monit的东西来进行监视,但我需要调试,为什么它经常失败。daemontools。。。嗯,它是由djb编写的,所以我只是对它需要的配置持谨慎态度@usaretech:这次不是-您只需使用名为run的脚本创建一个文件夹。这是一个服务。我可能会添加一些类似于monit的东西来进行监视,但我需要调试,为什么它经常失败。daemontools。。。嗯,它是由djb编写的,所以我只是对它需要的配置持谨慎态度@usaretech:这次不是-您只需使用名为run的脚本创建一个文件夹。这是一种服务。