作为守护进程运行 web.py

发布于 2024-07-26 03:30:02 字数 1388 浏览 4 评论 0原文

我有一个简单的 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 软件无法加载(即:服务没有监听),

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

I have a simple web.py program to load data. In the server I don't want to install apache or any webserver.

I try to put it as a background service with http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/

And subclassing:
(from 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)

However, the web.py software not load (ie: The service no listen)

If I call it directly (ie: No using the daemon code) work fine.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

无名指的心愿 2024-08-02 03:30:02

我终于找到问题所在了。

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

I finally find the problem.

Web.py accept from command-line the optional port number:

python code.py 80

And the script also take input from the command-line:

python WebServer start

then web.py try to use "start" as port number and fail. I don't see the error because was in the bacground.

I fix this with a mini-hack:

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()
攒眉千度 2024-08-02 03:30:02

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

/usr/bin/python index.py > log.txt 2>&1 & 

you can start the web.py by using this command

/usr/bin/python index.py > log.txt 2>&1 & 
ㄟ。诗瑗 2024-08-02 03:30:02

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

I don't think you're telling the daemon to run. You need to instantiate a MyDaemon object and call o.run(). It looks like WebService only starts and stops the service interface to your web app, not the actual web app itself.

网白 2024-08-02 03:30:02

不要像您在这里写的那样覆盖第二个参数:

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

Instead of overwrite the second argument like you wrote here:

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

you could just delete the second argument on 'start|restart', like this:

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

In this way, the webpy will receive all the arguments you passed from command line except the daemon controller. Then you can run simply:

python WebServer start 8080
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文