首页 > 代码库 > 用python做linux的服务安装脚本 - vncserver

用python做linux的服务安装脚本 - vncserver

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 osfrom 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 resultdef 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 resultdef 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 resultdef 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 resultdef 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