非常に単純な BaseHttpServer (以下のコード) を使用すると、次の問題が発生します。
を使用してバックグラウンドでサーバーを起動する./testserver.py &
と正常に動作し、サーバーはポート 12121 で応答します。サーバーを入力するとdisown
、まだ応答します。ターミナルを閉じた後、サーバーは次のリクエストの後に入出力エラーで停止しますtest.log
再構築の手順:
$ ./testserver &
$ bg
$ disown
ターミナルを閉じて、サーバーにリクエストを送信します -> サーバーが応答しません。
stdout
私が見つけた唯一の解決策は、 andをリダイレクトすることでしたstderr
: $ ./testserver > /dev/null 2>&1 または @Daniel Stated で通常の方法で呼び出すようにnohup
誰かが以前にこのバグを経験したことがありますか、または出力が不可能な場合に HttpServer がクラッシュすることが望ましい動作であるのはなぜですか?
testserver.py
#! /usr/bin/env python
import time
import BaseHTTPServer
HOST_NAME = '0.0.0.0'
PORT_NUMBER = 12121
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_HEAD(s):
s.send_response(200)
s.send_header("Content-type", "text/html")
s.end_headers()
def do_GET(s):
"""Respond to a GET request."""
s.send_response(200)
s.send_header("Content-type", "text/html")
s.end_headers()
s.wfile.write("MANUAL SERVER SUCCESS")
if __name__ == '__main__':
server_class = BaseHTTPServer.HTTPServer
httpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler)
try:
httpd.serve_forever()
except Exception as e:
with open('test.log', 'w') as f:
f.write(str(e))