标签:style blog ar io color os 使用 sp for
linux服务器在标准安装后,就集成了万能胶水python,python应用于科学计算、web服务、服务管理等等方面,既然这么方便何不利用python来做linux服务的安装脚本呢?
基本上一个linux操作系统安装好后,会安装基础服务应用,比如ftp、vncserver等等,其他的都是根据实际应用来安装,每次安装这些服务都要上网查查安装步骤,照步骤来走基本上不会走错。
设想一个场景,安装好linux操作系统后,通过网页从邮箱把python脚本下载下来,直接 python 脚本.py 即可。安全高效,不想事。
举一个简单的服务安装(vncserver)
vncserver 安装分以下几个步骤。
cmdlist = { 1:yum_install, #下载 2:vncserver_conf, #配置vncservers配置文件 3:vncpasswd, #设置vnc密码 4:vnc_restart, # 重启vnc服务 5:conf_iptables, #配置防火墙,开放端口 6:iptables_restart, #重启防火墙,让配置生效 7:xstartup_conf, #修改vnc用户的远程启动文件配置 8:vnc_restart #再次重启vnc服务 }
通过以上8个步骤便开通了vncserver服务,我把步骤细分成不同的函数,并组织成字典的数据格式。
下面是主程序运行部分
if __name__ == ‘__main__‘ : for cmd in sorted(cmdlist): # 利用sorted排序,确保是按设定的1、2、3的步骤来执行 if not cmdlist[cmd](): # cmdlist里面的函数对象都是返回布尔类型 show_info(cmdlist[cmd],‘is fail‘) # show_info 是一个显示打印错误的函数,用于执行的时候提示哪一步失败的。 break
当然,写脚本也要有面向对象开发的思想,有几个功能可以写成函数,成熟后还可以用于后续的脚本开发。这里也列了几个
比如备份文件,大家在编辑配置文件的时候,都应该先备份一个,以免弄错了还可以还原。这也是做事的原则。
def BackupFile(filepath,filename): ‘备份文件操作,利用本身的复制命令来实现。‘ result = False os.chdir(filepath) if os.path.exists(filename): __newfilename = ‘%s.%s.bak‘ % (filename,getDateTimeStr()) # getDateTimeStr是一个返回日期时间的函数 os.system(‘cp %s %s‘ % (filename,__newfilename)) result = True return result
编辑配置文件的函数,考虑到不是所有的配置信息直接加到配置文件最后就能使用,比如 iptables 防火墙的配置,开放端口一定要加在中间的位置,放在最后重启防火墙是不会成功的,所以编辑配置脚本是先读取源文件的内容后,清除源文件内容,然后在把读取之前的源内容一条一条的写入到配置文件中,中间要写入其他的脚本都是根据匹配规则来写入的。
def ConfScript(filepath,filename,restr,*args): ‘编写配置脚本‘ result = False if BackupFile(filepath,filename): try: content = [] ‘读取数据‘ with open(filepath+filename) as fr: for s in fr: content.append(s) ‘清空数据文本‘ if CleanScript(filepath,filename): # CleanScript 清空脚本,利用 os.system 执行 cat /dev/null > 配置文件来实现 fw = open(filepath+filename,‘w‘) if type(restr) == type(‘‘): # 根据 restr 来判断新增配置脚本是写入到什么位置,如果restr是字符,就根据字符来判断,如果是 None ,则把 *args写入到脚本的最后 for s in content: fw.writelines(s) if restr in s: for ag in args: fw.writelines(ag+‘\n‘) else: for s in content: fw.writelines(s) fw.writelines(‘\n‘) for ag in args: fw.writelines(ag+‘\n‘) fw.close() result = True else: show_error(‘Clean Fail‘) except Exception as e: show_error(str(e)) return result
以下是安装脚本的所有代码
#!/usr/bin/env python #incoding:utf-8 ‘‘‘ Created on 2014年12月16日 ‘‘‘ import os from scriptcore.utils import * from scriptcore.info import * def yum_install(): ‘yum_install‘ result = False try: str = ‘yum -y install tigervnc-server‘ os.system(str) result = True except Exception as e: show_error(str(e)) return result def vncserver_conf(): ‘vncserver_conf‘ __filepath = ‘/etc/sysconfig/‘ __filename = ‘vncservers‘ __searchkey = None __replacestring = [‘VNCSERVERS=\"1:root\"‘,‘VNCSERVERARGS[1]=\"-geometry 1024x768 -nolisten tcp\"‘] return ConfScript(__filepath,__filename,__searchkey,*__replacestring) def vncpasswd(): ‘vncpasswd‘ result = False try: str = ‘vncpasswd‘ os.system(str) result = True except Exception as e: show_error(str(e)) return result def vnc_restart(): ‘vnc_restart‘ result = False try: str = ‘service vncserver restart‘ os.system(str) result = True except Exception as e: show_error(str(e)) return result def conf_iptables(): ‘conf_iptables‘ __filepath = ‘/etc/sysconfig/‘ __filename = ‘iptables‘ __searchkey = ‘--dport 22‘ __replacestring = [‘-A INPUT -m state --state NEW -m tcp -p tcp --dport 5901 -j ACCEPT‘] return ConfScript(__filepath,__filename,__searchkey,*__replacestring) def iptables_restart(): ‘iptables_restart‘ result = False try: str = ‘service iptables restart‘ os.system(str) result = True except Exception as e: show_error(str(e)) return result def xstartup_conf(): ‘xstartup_conf‘ __filepath = ‘/root/.vnc/‘ __filename = ‘xstartup‘ __searchkey = None __replacestring = [‘gnome-session‘] return ConfScript(__filepath,__filename,__searchkey,*__replacestring) cmdlist = { 1:yum_install, 2:vncserver_conf, 3:vncpasswd, 4:vnc_restart, 5:conf_iptables, 6:iptables_restart, 7:xstartup_conf, 8:vnc_restart } if __name__ == ‘__main__‘ : for cmd in sorted(cmdlist): if not cmdlist[cmd](): show_info(cmdlist[cmd],‘is fail‘) break
以后,我们可以将linux操作系统大部分管理工作,都写成脚本化,这样管理工作将变得轻松,不是吗?
用python做linux的服务安装脚本 - vncserver
标签:style blog ar io color os 使用 sp for
原文地址:http://www.cnblogs.com/zoyo929/p/4168660.html