Python重啟深信服設備【生長吧!Python】

      網友投稿 1062 2025-03-31

      一、背景

      在生產環(huán)境中,有客戶架構為阿里云線上環(huán)境及線下IDC需要內網互通,互聯(lián)采用阿里云使用第三方深信服云產品與線下IDC側Cisco防火墻ipsec打通實現(xiàn),主要用于定時阿里云文件及數(shù)據(jù)備份至IDC,在生產應用中無故隧道會不定時中斷,聯(lián)系深信服及思科售后排查均沒有結果,但是進行手動的重啟阿里云上深信服設備隧道立即恢復,在兩邊網絡工程師排查無果后,想到去編寫監(jiān)控腳本,如果隧道終端去利用python重啟深信服設備,從而恢復隧道,數(shù)據(jù)傳輸延遲timeout及使用斷點續(xù)傳,當網絡層面異常無法解決時,換另一種思路來解決問題。

      二、技術要點

      2.1 編寫隧道監(jiān)控腳本

      由于線上阿里云側為公有云,且為配置EIP及NAT網關,ecs均采用前端公網SLB負責業(yè)務請求接入,其內部無法出公網,隧道監(jiān)控腳本想告警出來發(fā)送至微信及后續(xù)的去操作深信服需要公網連通,因此在線下IDC側放置檢查及重啟腳本。

      2.2 深信服重啟

      利用Python編寫去操作深信服,web頁面模擬登錄,主要利用到了selenium模塊,logging來記錄日志。

      利用阿里云ECS API來操作重啟深信服設備。

      三、源碼

      3.1 隧道檢測腳本

      檢測隧道連通性,如果隧道終端告警至微信及釘釘,其次觸發(fā)深信服重啟腳本。

      #!/bin/bash #檢測內網地址 IP=10.10.10.2 dir="/sangfor/Shscripts/pdc/" if [ ! -d ${dir} ];then mkdir -p ${dir} fi echo 1 > ${dir}pdcping.lock while true do #日志分割歸檔 Time=`date +%F` TIME="${Time} 23:59" if [ "${data}" == "${TIME}" ];then mkdir ${dir}${Time} && mv ${dir}pdcping.log ${dir}${Time}-pingpdc.log mv ${dir}${Time}-pingpdc.log ${dir}${Time} fi find ${dir} -mtime +7 -type d -exec rm -rf {} \; find ${dir} -mtime +7 -name "*-pingpdc.log" -exec rm -rf {} \; data=`date +%F' '%H:%M` data1=`date +%F' '%H:%M:%S` echo "------------${data1}---------------">>${dir}pingpdc.log ping -c 10 ${IP} >>${dir}pingpdc.log if [ $? -eq 1 ];then STAT=`cat ${dir}pdcping.lock` if [ ${STAT} -eq 1 ];then /usr/local/python34/bin/python3 /sangfor/Pysangfor/sangfor_public.py echo 0 > ${dir}pdcping.lock else continue fi else STAT=`cat ${dir}pdcping.lock` if [ ${STAT} -eq 0 ];then echo 1 > ${dir}pdcping.lock else continue fi fi done

      為防止隧道檢測腳本異常,另外編寫監(jiān)控監(jiān)測腳本的腳本配合定時任務來定時監(jiān)控,如果異常,重新拉起。

      #!/bin/bash num=$(ps -ef |grep pdc.sh|wc -l) cmd="/usr/bin/nohup /bin/bash /sangfor/Shscripts/pdc/pdc.sh &" if [ ${num} -lt 2 ];then ${cmd} fi

      配合定時任務

      * * * * * /bin/bash /sangfor/Shscripts/pdc/checkpdc.sh

      3.2 深信服操作腳本

      A 依賴軟件及python3.4版本安裝

      yum -y install zlib-devel zlib readline-devel openssl-devel wget gcc-c++ Xvfb lrzsz firefox cd /tmp wget -c https://www.python.org/ftp/python/3.4.5/Python-3.4.5.tgz tar -zxvf Python-3.4.5.tgz cd Python-3.4.5 ./configure --prefix=/usr/local/python34 make && make install echo "export PATH=$PATH:/usr/local/python34/bin" >/etc/profile.d/python34.sh source /etc/profile.d/python34.sh

      B pip安裝

      cd /tmp wget https://bootstrap.pypa.io/get-pip.py python3 get-pip.py

      C 安裝python模塊

      pip3 install selenium pip3 install pyvirtualdisplay pip3 install xvfbwrapper

      Python重啟深信服設備【生長吧!Python】

      D 下載安裝geckodriver

      cd /tmp wget -c https://github.com/mozilla/geckodriver/releases/download/v0.16.1/geckodriver-v0.16.1-linux64.tar.gz tar zxvf geckodriver-v0.16.1-linux64.tar.gz cp geckodriver /usr/bin/

      github地址

      模擬web登錄操作深信服

      cat > /sangfor/Pysangfor/sangfor_public.py<

      通過阿里云ECS API操作深信服設備

      #!/bin/env python3 # -*- coding:UTF-8 -*- # _author:kaliarch from aliyunsdkcore import client from aliyunsdkecs.request.v20140526 import RebootInstanceRequest,StartInstanceRequest,StopInstanceRequest import time import os import logging class ecsOper(): def __init__(self,logger): self.clentoper = client.AcsClient('', '', 'cn-hangzhou') self.logger = logger self.logger.info("------------------------start reboot *** ecs of API log-------------") def reboot_instance(self): # 設置參數(shù) request = RebootInstanceRequest.RebootInstanceRequest() request.set_accept_format('json') request.add_query_param('InstanceId', 'i-bpxxzx1rlsgvclq79au') # 發(fā)起請求 response = self.clentoper.do_action_with_exception(request) self.logger.info("public ecs *** reboot successful!") self.logger.info(response) print(response) def start_instance(self): request = StartInstanceRequest.StartInstanceRequest() request.set_accept_format('json') request.add_query_param('InstanceId', 'i-bpxxzx1rlsgvclq79au') # 發(fā)起請求 response = self.clentoper.do_action_with_exception(request) self.logger.info("public ecs *** start successful!") self.logger.info(response) print(response) def stop_instance(self): request = StopInstanceRequest.StopInstanceRequest() request.set_accept_format('json') request.add_query_param('InstanceId', 'i-bp1djzd1rlsgvclq79au') request.add_query_param('ForceStop', 'false') # 發(fā)起請求 response = self.clentoper.do_action_with_exception(request) request.add_query_param('InstanceId', 'i-bpxxzxd1rlsgvclq79au') self.logger.info(response) print(response) def testlog(self): self.logger.info("public test log") class Glp_Log: def __init__(self,filename): self.filename = filename def createDir(self): _LOGDIR = os.path.join(os.path.dirname(__file__), 'publiclog') print(_LOGDIR) _TIME = time.strftime('%Y-%m-%d', time.gmtime()) + '-' _LOGNAME = _TIME + self.filename print(_LOGNAME) LOGFILENAME = os.path.join(_LOGDIR, _LOGNAME) print(LOGFILENAME) if not os.path.exists(_LOGDIR): os.mkdir(_LOGDIR) return LOGFILENAME print(LOGFILENAME) def createlogger(self,logfilename): logger= logging.getLogger() logger.setLevel(logging.INFO) handler = logging.FileHandler(logfilename) handler.setLevel(logging.INFO) formater = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formater) logger.addHandler(handler) return logger if __name__ == "__main__": glploger = Glp_Log('public-***.log') logfilename = glploger.createDir() logger = glploger.createlogger(logfilename) app = ecsOper(logger) app.reboot_instance()

      四、效果展示

      查看檢查腳本日志已經進行了切割,且保留7天的日志,防止日志過大占用過多磁盤空間

      微信告警信息

      釘釘告警信息

      查看python腳本深信服重啟日志

      五、總結

      其簡單的實現(xiàn)了故障自愈,利用其思路客戶配合很多業(yè)務,例如簡單的應用重啟等。

      【生長吧!Python】有獎征文火熱進行中:https://bbs.huaweicloud.com/blogs/278897

      Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:為什么輸入欄里顯數(shù)字,表格里不顯示(表格中輸入數(shù)字不顯示數(shù)字)
      下一篇:Excel怎樣引用多個工作表數(shù)據(jù)(excel批量引用多個工作表數(shù)據(jù))
      相關文章
      亚洲中文字幕久久精品无码VA| 亚洲国产a∨无码中文777| 亚洲av无码不卡| 亚洲综合无码AV一区二区| 亚洲综合色视频在线观看| 亚洲中文无韩国r级电影| 亚洲精品成人区在线观看| 高清在线亚洲精品国产二区| 亚洲欧美日韩一区二区三区| 亚洲最大免费视频网| 亚洲国产高清美女在线观看| 亚洲成在人线电影天堂色| 亚洲国产精品无码久久久| 亚洲人成日本在线观看| 亚洲国产精品久久丫 | 亚洲另类古典武侠| 亚洲乱码一二三四区麻豆| 亚洲av成人综合网| 亚洲一区免费在线观看| 456亚洲人成影院在线观| 亚洲影院天堂中文av色| 亚洲另类自拍丝袜第五页| 国产成人人综合亚洲欧美丁香花 | 亚洲精品第一国产综合亚AV| 亚洲妇女无套内射精| 国产精品亚洲专区无码不卡| 亚洲毛片不卡av在线播放一区| 亚洲精品人成无码中文毛片| 中文字幕不卡亚洲| 亚洲大成色www永久网站| 亚洲四虎永久在线播放| 亚洲影视一区二区| 亚洲综合精品成人| 亚洲第一福利网站在线观看| 国产午夜亚洲精品国产成人小说| 亚洲阿v天堂在线| 亚洲精品国产福利在线观看| 亚洲最大成人网色香蕉| 亚洲无人区码一二三码区别图片 | 亚洲国产精品线在线观看| 亚洲成人免费电影|