2016-10-31 4 views
2

Я запускаю медиа-сервер plex для личного использования на домашней виртуальной машине Ubuntu 16.04 Desktop. Я использую его, пока я уезжаю на работу в течение недели.Сценарий проверки доступности удаленной службы, если нет перезапуска службы и/или сети

Недавно у меня возникли проблемы с подключением. Иногда это сам plex, который аварийно завершает работу и нуждается в перезапуске, а иногда это подключение к Интернету (eth0), которое необходимо перезапустить.

мне нужна небольшая помощь со скриптом, который я могу позвонить через хроны, чтобы проверить, если сервер удаленного доступа к, если она может достигать https://external.address:32400(обратите внимание, что реагирует только на HTTPS), если он не доступна, перезагрузка интернет-соединение (eth0), затем снова проверьте, доступен ли он удаленно, если он еще не удален, а затем перезагрузите сервер мультимедиа plex.

Plex установлен как услуга, поэтому звонок service plexmediaserver restart - это то, как я его перезапускаю. Я предполагаю, что это настольная установка для перезагрузки сети, сценарий должен использовать service network-manager restart.

Я нашел this пост и скрипт, но он очень старый и устаревший.

Надеюсь, кто-то может помочь мне с этим.

Заранее спасибо.

+0

Может ли утилита ping сделать это внутри цикла с паузой между попытками? – JohnH

ответ

0

нормально, после того, как делать немного больше исследований по моим проблемам, оказывается, у меня есть две разные проблемы, иногда VM россыпей это мостового соединения, а иногда сплетение сбои сервера мультимедиа.

Итак, я разделил решение на два простых сценария 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 

 Смежные вопросы

  • Нет связанных вопросов^_^