5

我有一个简单的 web.py 程序来加载数据。在服务器中,我不想安装 apache 或任何网络服务器。

我尝试将其作为后台服务使用http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/

和子类化:(来自http://www.jejik.com/files/examples/daemon.py

class Daemon:
    def start(self):
        """
        Start the daemon
        """
        ... PID CHECKS....

        # Start the daemon
        self.daemonize()
        self.run()
#My code
class WebService(Daemon):
        def run(self):
            app.run()

if __name__ == "__main__":
    if DEBUG:
        app.run()
    else:
        service = WebService(os.path.join(DIR_ACTUAL,'ElAdministrador.pid'))
        if len(sys.argv) == 2:
            if 'start' == sys.argv[1]:
                service.start()
            elif 'stop' == sys.argv[1]:
                service.stop()
            elif 'restart' == sys.argv[1]:
                service.restart()
            else:
                print "Unknown command"
                sys.exit(2)
            sys.exit(0)
        else:
            print "usage: %s start|stop|restart" % sys.argv[0]
            sys.exit(2)

但是,web.py 软件没有加载(即:服务没有监听)

如果我直接调用它(即:不使用守护程序代码)工作正常。

4

4 回答 4

5

我终于找到问题了。

Web.py 从命令行接受可选的端口号:

python code.py 80

该脚本还从命令行获取输入:

python WebServer start

然后 web.py 尝试使用“start”作为端口号并失败。我没有看到错误,因为在免费环境中。

我用一个小技巧解决了这个问题:

if __name__ == "__main__":
    if DEBUG:
        app.run()
    else:
        service = WebService(os.path.join(DIR_ACTUAL,'ElAdministrador.pid'))
        if len(sys.argv) == 2:
            if 'start' == sys.argv[1]:
                sys.argv[1] = '8080'
                service.start()
于 2009-07-07T20:54:41.627 回答
5

您可以使用此命令启动 web.py

/usr/bin/python index.py > log.txt 2>&1 & 
于 2010-05-13T15:57:11.693 回答
0

我不认为你在告诉守护进程运行。您需要实例化一个 MyDaemon 对象并调用 o.run()。看起来 WebService 仅启动和停止 Web 应用程序的服务接口,而不是实际的 Web 应用程序本身。

于 2009-07-07T16:57:17.237 回答
0

而不是像你在这里写的那样覆盖第二个参数:

if __name__ == "__main__":
    if DEBUG:
        app.run()
    else:
        service = WebService(os.path.join(DIR_ACTUAL,'ElAdministrador.pid'))
        if len(sys.argv) == 2:
            if 'start' == sys.argv[1]:
                sys.argv[1] = '8080'
                service.start()

你可以删除'start|restart'的第二个参数,像这样:

if __name__ == "__main__":
    if DEBUG:
        app.run()
    else:
        service = WebService(os.path.join(DIR_ACTUAL,'ElAdministrador.pid'))
        if len(sys.argv) == 2:
            if 'start' == sys.argv[1]:
                delete del sys.argv[1:2]
                service.start()

这样,webpy 将接收您从命令行传递的所有参数,除了守护进程控制器。然后你可以简单地运行:

python WebServer start 8080
于 2011-10-29T21:23:00.427 回答