2016-10-31 39 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 
相关问题