使用非常简单的BaseHttpServer(下面的代码)我遇到了以下问题:
使用./testserver.py &
在后台启动服务器工作正常,服务器响应端口12121。当我输入disown
时,服务器仍会响应。关闭终端后,服务器在下一个请求后停止,test.log
重建步骤:
$ ./testserver &
$ bg
$ disown
关闭终端,向服务器发送请求 - >服务器没有响应。
我找到的唯一解决方案是重定向stdout
和stderr
:
$ ./testserver> / dev / null 2>& 1
或者@Daniel说明用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))
答案 0 :(得分:2)
您只能将字符串写入文件而非例外。并且您必须在某处重定向stdout
和stderr
,否则任何输出都会挂起您的程序。为什么不使用nohup
?这是正常的方式,没有终端启动程序。
要明确这一点:HttpServer中没有特殊行为。 HttpServer正在向终端写入日志信息,因此您需要终端或重定向到文件。