2016-11-22 114 views
1

我有一个python脚本,仅当我的服务器可用时才工作。所以在脚本开始之前,我想ping我的服务器,或者检查服务器的可用性。在没有root权限的情况下在Python中Ping服务器

已经有一些相关的SO问题了。 E.g

  1. pyping module

    response = pyping.ping('Your IP') 
    if response.ret_code == 0: 
        print("reachable") 
    else: 
        print("unreachable") 
    
  2. ping process in python

    response = os.system("ping -c 1 " + hostname) 
    

这些答案的效果很好,但只是作为root用户! 当我使用这个解决方案作为一个普通用户,我收到以下错误信息:

ping: Lacking privilege for raw socket. 

我需要一个解决方案,我可以做,作为一个普通用户,因为我跑在詹金斯工作这个脚本,并不是以root身份运行的选项。

+0

是否必须是ping?怎么样一个HTTP GET或一个简单的UDP数据包? –

+0

嗯,我没有想过。我想到的第一件事是ping,因此我试图用ping来解决它。它简短而简单。但是,如果有其他解决方案,请在下面将它写为答案。 – Oni1

+3

你为什么要检查可用性?在尝试使用已知端口上运行的某些服务之前,您是否尝试进行快速检查?如果是的话,我宁愿尝试连接到服务,而不是先尝试ping,然后连接到“真实”服务。 –

回答

2

试图执行HTTP HEAD请求,假设计算机有一个HTTP服务器正在运行,是否足够?

from http.client import HTTPConnection # python3 

try: 
    conn = HTTPConnection(host, port, timeout) 
    conn.request("HEAD", "/") 
    conn.close() 

    # server must be up 
except: 
    # server is not up, do other stuff 
相关问题