用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 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操作系统大部分管理工作,都写成脚本化,这样管理工作将变得轻松,不是吗?

时间: 2024-11-05 19:37:46

用python做linux的服务安装脚本 - vncserver的相关文章

Linux中自动安装脚本

如何让你的主机自动的完成安装,自动的回答系统提出的问题,编写自动安装脚本即可实现,如下将详细解释自动脚本安装方法. systemd-config-kickstart  ##自动应答脚本制作工具 安装成功,在安装过程中systemd-config-kickstart 将做出脚本应答 进行选择语言选择 (1)Basic Configuration 安装过程的必须一致时区选择(可不选,在脚本中都有写到,这里做一个解释) Root passwd 填写Root密码,并确认,两次输入密码 Advanced

windows 服务安装脚本拾遗

转自:http://blog.csdn.net/susubuhui/article/details/7881096 1.安装脚本 echo 请按任意键开始安装客户管理平台的后台服务 echo. pause echo. echo 清理原有服 务项 %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\installutil.exe /U WS_LiDeBaoDataServerV1.0.exe > InstallService.log echo. echo

WindowsService服务安装脚本

安装脚本%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe D:\liuyl\WeiXinService\WindowsService.exenet start WXServicesc config WXService start= auto WXService 是服务的名称 卸载脚本 %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe -u D

Linux/CentOS 服务安装/卸载,开机启动chkconfig命令详解|如何让MySQL、Apache开机启动?

chkconfig chkconfig在命令行操作时会经常用到.它可以方便地设置和查询不同运行级上的系统服务.这个可要好好掌握,用熟练之后,就可以轻轻松松的管理好你的启动服务了. 注:谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 语法: chkconfig       [--add]      [--del]     [--list]      [系统服务] chkconfig       [--level/levels]      [等级代号]     

linux telnet服务安装与配置

关闭防火墙:service iptabls stop            chkconfig iptabls off 1.安装telnet服务 [[email protected] ~]# rpm -qa |grep telnet   //检查是否安装这相关软件包telnet-0.17-47.el6.x86_64telnet-server-0.17-47.el6.x86_64 如果未安装,配置YUM源,使用yum install telnet telnet-server命令安装 2.开启tel

linux nfs服务安装

nfs为网络文件系统也可理解为文件共享,方式为服务器上安装nfs服务,客户端通过挂在的方式把服务器上的目录挂载到本地,实现文件共享 1.查看有没有安装nfs rpm -qa |grep nfs 2.安装nfs yum -y install nfs-utils 3.开启服务 /etc/init.d/nfs start /etc/init.d/rpcbind start 4.配置exports vi/etc/exports /home/zuzhao 192.168.1.0  255.255.254.

python之Linux开发环境安装

今天安装python的mysql API的时候遇到问题 [[email protected] MySQL-python-1.2.5]# python setup.py build sh: mysql_config: command not found Traceback (most recent call last): File "setup.py", line 17, in <module> metadata, options = get_config() File &q

linux telnet服务安装和配置

因为要升级SSH,为了预防SSH升级失败无法连接服务器,安装telnet服务以备不时之需,升级完SSH后再将telnet服务关闭. telnet服务器配置 一.安装telnet软件包(通常要两个). 1. telnet-client (或 telnet),这个软件包提供的是 telnet 客户端程序: 2.是 telnet-server 软件包,这个才是真正的 Telnet server 软件包! 安装之前先检测是否这些软件包已安装,方法如下: [[email protected] ~]#rpm

Linux FTP服务安装和远程登录失败

问题:本机VPlayer安装pure-ftpd  ftp服务,通过flashfxp从windows连接出现以下错误: 1 [左] 正在连接到 vmare -> IP=192.168.174.133 PORT=21 2 [左] 已连接到 vmare 3 [左] 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------- 4 [左] 220-You are user number 1 of 50 allowed. 5 [左] 220-L