2016-10-31 82 views
2

我正在運行Plex媒體服務器以供在家中的Ubuntu 16.04桌面VM上專用。 我在週末上班時使用它檢查遠程服務是否可用的腳本(如果不重新啓動服務和/或網絡)

最近我一直困擾着連接問題。有時,它本身就是崩潰,需要重新啓動,有時它是需要重新啓動的Internet連接(eth0)。

我需要一個腳本,我可以通過cron調用來檢查服務器是遠程訪問,如果可以達到https://external.address:32400有點幫助(請注意,只響應HTTPS),如果它不能訪問,重啓互聯網連接(eth0),然後再次檢查它是否可以遠程訪問,如果它仍然不可遠程訪問,請重新啓動Plex介質服務器。

Plex作爲服務安裝,因此致電service plexmediaserver restart是我如何重新啓動它。我猜想,因爲這是一個桌面安裝,重新啓動腳本需要使用的網絡service network-manager restart

我發現this後和腳本,但它是非常陳舊和過時。

希望有人能幫助我解決這個問題。

在此先感謝。

+0

ping實用程序可以在一個循環內執行此操作嗎? – JohnH

回答

0

OK,做我的問題多一點研究後,事實證明,我有兩個不同的問題,有時VM失去它的橋接方式,有時plex的媒體服務器崩潰。

因此,我已將解決方案分成兩個簡單的bash腳本,我從cron調用。

第一次檢查互聯網是否正常工作,如果沒有,則重新啓動虛擬機。只需重新啓動網絡管理器不起作用。

#!/bin/bash 

PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/$ 

#Check if the vm can access google.com, if yes then exit 
     if nc -zw1 google.com 80; 
       then exit 
#If it can't reach google.com restart the vm 
       else shutdown -r now 
     fi 

第二腳本檢查,看它是否可以在本地訪問plex的媒體服務器,如果沒有的話,將重新啓動叢的服務。

#!/bin/bash 

PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/$ 

#Check to see that plex is acessable locally, if yes then exit 
if curl -s --head --request GET http://localhost:32400 | grep "200 OK" > /dev/$ 
    then exit 
#If not then restart plex service 
else 
    service plexmediaserver restart 
fi 

感謝您的建議。這遠非一個優雅的解決方案,但由於我時間緊迫,這是一個解決方案。

0

你可以使用這個片段我發現here。您需要輸入您正在查找的IP地址,然後根據找到的值here查看狀態碼。如果get_status_code返回一個代碼200,則可以遠程訪問。

import httplib 

def get_status_code(host, path="/"): 
    """ This function retreives the status code of a website by requesting 
     HEAD data from the host. This means that it only requests the headers. 
     If the host cannot be reached or something else goes wrong, it returns 
     None instead. 
    """ 
    try: 
     conn = httplib.HTTPConnection(host) 
     conn.request("HEAD", path) 
     return conn.getresponse().status 
    except StandardError: 
     return None 
相關問題