生产环境中,需求为关机,重启和修改ip地址,用Python脚本实现。
#coding = utf8 ‘‘‘ Created on 2016-7-4 @desc: change the network of system and reboot,shutdown ;suit for ubuntu and centos @attention: if ubuntu, need root or sudo without password ;and before use this script , you need change something; eg: < chown root:root changenetwork.py chmod 777 changenetwork.py chmod 777 /etc/network/interfaces > ‘‘‘ import sys import os import platform import commands class systemControl(object): def __init__(self,command,ip,gateway,netmask,device): """ @desc: init """ self.platform = self.getPlatform() self.command = command self.ip = ip self.gateway = gateway self.netmask = netmask self.device = device def shutDown(self): """ @attention: shutdown the system """ os.system("sudo init 0") def reboot(self): """ @attention: reboot the system """ os.system("sudo init 6") def changeNetwork(self): """ @attention: change the network of the system """ if self.platform == "centos": path = "/etc/sysconfig/network-scripts/ifcfg-"+str(self.device) file_handler = open(path,"r") network_content = file_handler.read() file_handler.close() conte = "IPADDR=%s\nNETMASK=%s\nGATEWAY=%s\n" %(self.ip,self.netmask,self.gateway) num = network_content.find("IPADDR") if num != -1: network_content = network_content[:num]+conte file_handler = open(path,"w") file_handler.write(network_content) file_handler.close() elif self.platform == "ubuntu": path = "/etc/network/interfaces" file_handler = open(path,"r") network_interfaces = file_handler.read() file_handler.close() network_content = network_interfaces.split("auto") for i in network_content: if self.device in i: content = "auto %s\niface %s inet static\n\taddress %s\n\tnetmask %s\n\tgateway %s\n\t" %(self.device,self.device,self.ip,self.netmask,self.gateway) network_interfaces = network_interfaces.replace(i,content) break file_handler = open(path,"w") file_handler.write(network_interfaces) file_handler.close() result = commands.getoutput("sudo ifdown %s && sudo ifup %s" %(self.device,self.device)) print result def delWith(self): if self.command == "reboot": self.reboot() elif self.command == "shutdown": self.shutDown() elif self.command == "changeNetwork": self.changeNetwork() else: print "no this command......" def getPlatform(self): """ @attention: get the platform of the system """ try: platForm = platform.platform().lower() if "ubuntu" in platForm: print platForm return "ubuntu" elif "centos" in platForm: print platForm return "centos" except: print "unknow os..." return None if __name__ == "__main__": """" @param: <shutdown/reboot> <changeNetwork>,<ip>,<gateway>,<netmask>,<device> """ command = sys.argv[1] try: ip = sys.argv[2] gateway = sys.argv[3] netmask = sys.argv[4] device = sys.argv[5] except: ip = None gateway = None netmask = None device = None doSomething = systemControl(command,ip,gateway,netmask,device) doSomething.delWith()
目前只支持Ubuntu和centos,其他操作系统上没测试,应该也行。
若要是Ubuntu,需要修改sudo免密状态:
sudo vim /etc/sudoers.d/nopasswd4sudo
添加内容重启:
cimer ALL=(ALL) NOPASSWD : ALL
修改文件权限:
chmod 777 /etc/network/interfaces
使用说明:
python systemControl.py shutdown #关机 python systemControl.py reboot #重启 python systemControl.py changeNetwork ip gateway netmask device #修改ip
时间: 2024-10-06 03:04:54