【问题标题】:Script to check if remote service is available, if not restart service and/or network检查远程服务是否可用的脚本,如果不可用,则重新启动服务和/或网络
【发布时间】:2016-10-31 14:34:39
【问题描述】:

我在家里的 Ubuntu 16.04 桌面虚拟机上运行一个 plex 媒体服务器供私人使用。 我在一周内上班时使用它

最近我一直被连接问题所困扰。有时是 plex 本身崩溃并需要重新启动,有时是 Internet 连接 (eth0) 需要重新启动。

我需要一些脚本帮助,我可以通过 cron 调用该脚本来检查服务器是否可以远程访问,是否可以到达 https://external.address:32400(请注意它只响应 https),如果无法访问,请重新启动 Internet 连接 (eth0),然后再次检查它是否可以远程访问,如果仍然无法远程访问,则重新启动 plex 媒体服务器。

Plex 是作为服务安装的,所以调用 service plexmediaserver restart 是我重新启动它的方式。我猜因为它是重新启动网络的桌面安装,所以脚本需要使用service network-manager restart

我找到了this 的帖子和脚本,但它已经过时了。

希望有人能帮我解决这个问题。

提前致谢。

【问题讨论】:

  • ping 实用程序能否在循环中执行此操作,并在尝试之间暂停?

标签: networking remote-access application-restart


【解决方案1】:

好的,在对我的问题进行了更多研究之后,我发现我有两个不同的问题,有时 VM 会失去它的桥接连接,有时 plex 媒体服务器会崩溃。

因此,我将解决方案拆分为两个简单的 bash 脚本,我从 cron 调用它们。

第一个检查互联网是否正常工作,如果没有,它会重新启动 VM。简单地重新启动网络管理器不起作用。

#!/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 媒体服务器,如果不能,则重新启动 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

感谢您的建议。这远非一个优雅的解决方案,但由于时间紧迫,这是一个解决方案。

【讨论】:

    【解决方案2】:

    你可以使用我找到的这个 sn-p 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 2011-10-10
      • 2022-10-09
      • 2018-07-19
      • 1970-01-01
      相关资源
      最近更新 更多