基于服务器资源监控程序增加一键关机

增加一键关机按钮

        
        #一键关机
        self.Shutdown_btn = wx.Button(self.panel1, -1, "一键关机", pos=(950,20),size=(70, 70))
        #前景格式
        fontButton = wx.Font(10,wx.SCRIPT,wx.LIGHT,wx.NORMAL,faceName="黑体")
        self.Shutdown_btn.SetFont(fontButton)
        #背景颜色
        self.Shutdown_btn.SetBackgroundColour("#ff9933")
        self.Bind(wx.EVT_BUTTON, self.Shutdown, self.Shutdown_btn)

  增加一键关机方法(会调用之前的SSH登录方式)

    def Shutdown(self,event):
        #实例化Remote_management_WayKind类
        self.Ssh_load = MESRM.Remote_management_WayKind() 
        with open("ServerComputerInfo.json", 'r') as fw:
            injson = json.load(fw)

        LoadInfolist1= []
        LoadInfolist3= []

        for key1,value in injson.items():
            
                    
            if key1 == 'SoftWarePC' :
                self.log_info1.AppendText('\n' +key1 + '虚拟主机正在关机\n')
                for value2 in value :
                           
                    LoadInfolist2=[]
                    for key,value3 in value2.items():             
                   
                        LoadInfolist2.append(value3)
                    LoadInfolist1.append(LoadInfolist2)            
                                
                countlen =  len(LoadInfolist1)    
                for i in range(countlen): 
                    self.log_info1.AppendText(LoadInfolist1[i][0]+'虚拟机正在关机 \n' )   
                
                    td = Thread(target=self.Use_Monitor, args=(self, LoadInfolist1[i]))
                    td.setDaemon(1)
                    td.start()
            else:
                self.log_info1.AppendText('\n' +key1 + '实体机关机等待120秒\n')
                
                def HardWarePC():
                    timecount = 120  
                    for i in range(120):
                        #nowtime = datetime.datetime.now()
                        self.log_info1.AppendText('实体机关机倒计时 ' + str(timecount) +'秒 \n')
                        timecount = timecount - 1
                        time.sleep(1)
                    
                    for value2 in value :
                               
                        LoadInfolist4=[]
                        for key,value3 in value2.items():             
                       
                            LoadInfolist4.append(value3)
                        LoadInfolist3.append(LoadInfolist4)            
                                    
                    countlen =  len(LoadInfolist3)    
                    for i in range(countlen): 
                        self.log_info1.AppendText(LoadInfolist3[i][0]+'实体机开始关机 \n' )   
                    
                        td = Thread(target=self.Use_Monitor, args=(self, LoadInfolist3[i]))
                        td.setDaemon(1)
                        td.start()
                        
                td = Thread(target=HardWarePC)
                td.setDaemon(1)
                td.start()

  调用json文件的格式,注意json细节,比如逗号和括号的使用

{ 
"SoftWarePC": [ { "ip": "X.x.x.x", "name": "abcde", "password": "dadas", "command": "sudo shutdown -h now;shutdown -s -t 0" },
  {
        "ip": "X.x.x.x",
        "name": "abcde",
        "password": "dadas",
        "command": "sudo shutdown -h now;shutdown -s -t 0"
    }
], 
"HardWarePC":
[
{
"ip": "1.2.2.3",
"name": "464564",
"password": "dadasd",
"command": "sudo shutdown -h now;shutdown -s -t 0"
}
]
}

  由于技术所限,对当前一键关机脚本存在的两个问题做个说明记录:1、需要确定对象服务器是配置了SSHserver的,不然无法通过SSH方式链接到对应的服务器;2、针对linux系统,需要通过配置账号免sudo时输入密码的权限,否则会由于脚本无法应答密码而无法执行关机命令;

(操作步骤:

进入配置文件

vim /etc/sudoers 

配置命令的格式(注意查看文本中说明性语句指示,语句添加的位置很重要,直接会决定配置生不生效)

youuser ALL=(ALL) ALL
%youuser ALL=(ALL) ALL
youuser ALL=(ALL) NOPASSWD: ALL
%youuser ALL=(ALL) NOPASSWD: ALL

   )

posted @ 2022-09-02 09:25  No九五二七9527  阅读(73)  评论(0)    收藏  举报