2016-11-22 318 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 
相關問題