5

データをロードするための簡単なweb.pyプログラムがあります。サーバーに、ApacheやWebサーバーをインストールしたくありません。

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 を開始できます

/usr/bin/python index.py > log.txt 2>&1 & 
于 2010-05-13T15:57:11.693 に答える
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 に答える
0

ここに書いたように2番目の引数を上書きする代わりに:

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' の 2 番目の引数を削除するだけです。

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 に答える
0

デーモンに実行を指示しているとは思いません。MyDaemon オブジェクトをインスタンス化し、o.run() を呼び出す必要があります。WebService は、実際の Web アプリ自体ではなく、Web アプリへのサービス インターフェイスのみを開始および停止するようです。

于 2009-07-07T16:57:17.237 に答える