我在我的 ubuntu 机器上安装了collectd。默认安装 Python 服务器。我需要使用collectd 将所有系统指标推送到浏览器。为此我需要运行 python 服务器。但是当我尝试运行时出现错误。
请帮我。
下面是我的代码
#!/usr/bin/env python
import CGIHTTPServer
import BaseHTTPServer
from optparse import OptionParser
class Handler(CGIHTTPServer.CGIHTTPRequestHandler):
cgi_directories = ["/cgi-bin"]
PORT = 8888
def main():
parser = OptionParser()
opts, args = parser.parse_args()
if args:
httpd = BaseHTTPServer.HTTPServer((args[0], int(args[1])), Handler)
print "Collectd-web server running at http://%s:%s/" % (args[0], args[1])
else:
httpd = BaseHTTPServer.HTTPServer(("127.0.0.1", PORT), Handler)
print "Collectd-web server running at http://%s:%s/" % ("0.0.0.0", PORT)
httpd.serve_forever()
if __name__ == "__main__":
main()
当我运行命令时python runserver.py
我得到的输出像
Traceback (most recent call last):
File "runserver.py", line 24, in <module>
main()
File "runserver.py", line 19, in main
httpd = BaseHTTPServer.HTTPServer(("127.0.0.1", PORT), Handler)
File "/usr/lib/python2.7/SocketServer.py", line 417, in __init__
self.server_bind()
File "/usr/lib/python2.7/BaseHTTPServer.py", line 108, in server_bind
SocketServer.TCPServer.server_bind(self)
File "/usr/lib/python2.7/SocketServer.py", line 431, in server_bind
self.socket.bind(self.server_address)
File "/usr/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 98] Address already in use
[1]+ Exit 127 runserver.py
答案1
从错误中可以清楚地看到Address already in use
。这意味着您已经有一些其他程序正在侦听指定的接口/端口。
确保没有其他程序正在侦听您的端口 (8888)。你可以这样做:
netstat -plnt | grep 8888
并停止该过程。
否则更改端口号。另请注意,为了使用 < 1024 的端口号,您需要 root 权限。对于> 1024 的端口,您不需要它。