如何使用Python检查我的服务器是否已启动并正在运行?

时间:2014-01-01 09:19:36

标签: python http url

如何在Python中对特定URL进行HTTP调用,然后确定服务器是否已启动并运行。

我最近开始使用Python,所以不确定任何这样的库。

如果我打开以下网址 -

http://dbx45.dc1.host.com:8082/console

然后一些页面打开给我,这意味着我的服务器是UP和RUNNING。但如果它不是UP和RUNNING,那么它在CHROME上显示我这样 -

Oops! Google Chrome could not connect to http://dbx45.dc1.host.com:8082/console

在FIREFOX上 -

Unable to connect
Firefox can't establish a connection to the server at dbx45.dc1.host.com:8082

那么如何从Python中弄清楚我的服务器是否已启动并运行?

更新: -

这是我到目前为止所尝试的 -

status = urllib2.urlopen("http://dbx45.dc1.host.com:8082/console").read()
print status

如何简化此操作以了解服务器是否已启动并正在运行?

4 个答案:

答案 0 :(得分:1)

一个易于使用的库就是请求。

import requests
page = requests.get('http://dbx45.dc1.host.com:8082/console')

然后你可以检查这个状态

page.status_code

200意味着它没问题,400或500的东西意味着出了问题。

答案 1 :(得分:1)

浏览器显示的错误是无法连接。所以我认为你所追求的是服务器是否真正在监听端口。为此,您不需要整个URL,只需要主机和端口以及简单的套接字连接测试。

import sys
import socket

def servertest(argv):
    host = argv[1]
    port = int(argv[2])

    args = socket.getaddrinfo(host, port, socket.AF_INET, socket.SOCK_STREAM)
    for family, socktype, proto, canonname, sockaddr in args:
        s = socket.socket(family, socktype, proto)
        try:
            s.connect(sockaddr)
        except socket.error:
            return False
        else:
            s.close()
            return True


if __name__ == "__main__":
    if servertest(sys.argv):
        print("Server is UP")
    else:
        print("Server is DOWN")

答案 2 :(得分:0)

如果无法打开网址或提供错误代码,您可以使用urllib引发错误。

exception urllib2.URLError http://docs.python.org/2/library/urllib2.html#urllib2.URLError

它还有一个reason参数,您可以使用该参数缩小问题范围。

示例:

>>> import urllib2
>>> urllib2.urlopen("http://dbx45.dc1.host.com:8082/console")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 394, in open
    response = self._open(req, data)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 412, in _open
    '_open', req)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 372, in _call_chain
    result = func(*args)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1199, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1174, in do_open
    raise URLError(err)
urllib2.URLError: <urlopen error [Errno 60] Operation timed out>

要查看它是否已启动:

try:
    urllib2.urlopen("http://dbx45.dc1.host.com:8082/console")
except urllib2.URLError:
    print "Some error"

答案 3 :(得分:0)

matcher