码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-12-17 12:19:59      阅读:256      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!