温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python常用运维脚本的示例分析

发布时间:2021-08-03 10:54:59 来源:亿速云 阅读:148 作者:小新 栏目:开发技术

这篇文章主要介绍了python常用运维脚本的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、ps 可以查看进程的内存占用大小,写一个脚本计算一下所有进程所占用内存大小的和。

(提示,使用ps aux 列出所有进程,过滤出RSS那列,然后求和)

注:ps -ef 与 ps aux 效果一样使用随意

import os list = [] sum = 0   str1 = os.popen('ps aux','r').readlines() for i in str1:   str2 = i.split()   new_rss = str2[5]   list.append(new_rss) for i in list[1:-1]:    num = int(i)   sum = sum + num  print '%s:%s' %(list[0],sum)

二、一键部署lvs与keepalived

注:部署keepalived配置文件,会自动将lvs部署好,不必单独搭建,但是要下载好ipvsadm

这里单独搭建了lvs

#提前配置好免密钥登陆,与apache服务 import pexpect import os ds_ip = '192.168.102.143' rs1_ip = '192.168.102.144' rs2_ip = '192.168.102.145' vip = '192.168.102.250' ds_cmd = ['ipvsadm -C',      'ipvsadm -A -t {vip}:80 -s rr'.format(vip=vip),      'ipvsadm -a -t {vip}:80 -r {rs1_ip}:80 -g'.format(vip=vip, rs1_ip=rs1_ip),      'ipvsadm -a -t {vip}:80 -r {rs2_ip}:80 -g'.format(vip=vip,rs2_ip=rs2_ip),      'ifconfig ens33:0 {vip} broadcast {vip} netmask 255.255.255.255 up'.format(vip=vip),      'route add -host {vip} dev ens33:0'.format(vip=vip)      ] # for ds_cmd in ds_cmd: rs1_cmd = [   'ansible rs1 -m shell -a "ifconfig lo:0 {vip} broadcast {vip} netmask 255.255.255.255 up" &>/dev/null'.format(vip=vip),   'ansible rs1 -m shell -a "route add -host {vip} dev lo:0" &>/dev/null'.format(vip=vip),   'ansible rs1 -m shell -a "echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore" &>/dev/null',   'ansible rs1 -m shell -a "echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce" &>/dev/null',   'ansible rs1 -m shell -a "echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore" &>/dev/null',   'ansible rs1 -m shell -a "echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce" &>/dev/null',   'service httpd restart'] # for rs_cmd in rs_cmd: rs2_cmd = [   'ansible rs2 -m shell -a "ifconfig lo:0 {vip} broadcast {vip} netmask 255.255.255.255 up" &>/dev/null'.format(vip=vip),   'ansible rs2 -m shell -a "route add -host {vip} dev lo:0" &>/dev/null'.format(vip=vip),   'ansible rs2 -m shell -a "echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore" &>/dev/null',   'ansible rs2 -m shell -a "echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce" &>/dev/null',   'ansible rs2 -m shell -a "echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore" &>/dev/null',   'ansible rs2 -m shell -a "echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce" &>/dev/null',   'service httpd restart'] ansible=''' echo "[rs1]" >> /etc/ansible/hosts; echo "{rs1_ip}" >> /etc/ansible/hosts; echo "[rs2]" >> /etc/ansible/hosts; echo "{rs2_ip}" >> /etc/ansible/hosts; '''.format(rs1_ip=rs1_ip,rs2_ip=rs2_ip) def Ansible():   res = os.system('yum install ansible -y &>/dev/null')   if res== 0:     print('ansible安装完成!')     os.system(ansible) def lvs():   i = os.system('yum -y install ipvsadm &>/dev/null')   if i == 0:     print('lvs下载完成')     for a in ds_cmd:       res = os.system(a)       if res == 0:         print('ok')       else:         print('false')     for b in rs1_cmd:       res1 = os.system(b)       if res1 == 0:         print('ok')       else:         print('false')     for c in rs2_cmd:       res2 = os.system(c)       if res2 == 0:         print('ok')       else:         print('false')   else:     print('lvs下载失败') keepalived = ''' #全局配置 ! Configuration File for keepalived #全局配置 global_defs {   notification_email {     #收件人地址   }     #邮件服务器 } VRRP配置DS1 vrrp_instance VI_1 {   state MASTER          #角色类型MASTER|BACKUP   interface ens33          #网卡名称   virtual_router_id 51      #虚拟路由id(需要与BACKUP一致)   priority 100          #优先级   advert_int 1          #没1秒检查一次   #nopreempt            #非抢占模式   authentication {     auth_type PASS        #认证类型 主备之间必须一样     auth_pass 1111        #认证密码 主备之间必须一样   }   virtual_ipaddress {     192.168.102.250        #虚拟ip(vip)   } } #LVS配置 virtual_server 192.168.102.250 80 {   delay_loop 3          #健康检查时间间隔   lb_algo rr            #负载均衡调度算法   lb_kind DR            #负载均衡转发规则   protocol TCP          #协议   real_server 192.168.102.144 80 {  #要监控的real_server的ip和端口号       weight 1         #权重     TCP_CHECK {          #基于tcp协议的检查       connect_timeout 3     #连接时间超时       retry 3          #重连次数       delay_before_retry 3  #重连间隔时间     }   }   real_server 192.168.102.145 80 {       weight 1     TCP_CHECK {       connect_timeout 3       retry 3       delay_before_retry 3     }   } }''' def Keepalived():   d = os.system('yum install keepalived -y &> /dev/null')   if d == 0:     print('keeplived下载完成')     with open(r'/etc/keepalived/keepalived.conf', 'w', encoding='utf-8') as f:       f.write(keepalived)     e = os.system('systemctl start keepalived')     if e == 0:       print('keepalived部署完成!')     else:       print('keepalived部署失败')   else:     print('keepalived下载失败') def main():   # key()   Ansible()   # ssh_copy()   lvs()   Keepalived() if __name__ == '__main__':   main()

三、用python3编写一个监控上面lvs服务状态和系统资源的脚本

import yagmail import paramiko import socket import re import time ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) rs1_ip = '192.168.102.144' rs2_ip = '192.168.102.145' ds_ip = '192。168.102.143' disk_cmd = "df -m | grep /dev/sda1 | awk '{print $4}'" cpu_cmd = ''' top n 1 d 1 b -p 1 | grep '%Cpu' | awk -F "," '{print $4}' | awk -F "id" '{print $1}' | awk -F "." '{print $1}' ''' free_cmd = "free -m | grep Mem |awk '{print $7}'" def connect1():   ssh.connect('{rs1_ip}'.format(rs1_ip=rs1_ip), 22, 'root', '1', timeout=3) def connect2():   ssh.connect('{rs2_ip}'.format(rs2_ip=rs1_ip), 22, 'root', '1', timeout=3) def mail(head, Contents):   yag = yagmail.SMTP(user="15898297124@163.com", password="zz54605519", host='smtp.163.com')   yag.send('15898297124@163.com',subject = head, contents = Contents)   yag.close() def http():   socket.setdefaulttimeout(1)   server = socket.socket()   host_list = ['%s:80' % (rs1_ip),'%s:80' % (rs2_ip)]   for info in host_list:     ip = re.compile('(.*?):(.*)').search(info).group(1)     port = re.compile('(.*?):(.*)').search(info).group(2)     res = server.connect_ex((ip, int(port)))     if res != 0:       mail(ip,'%s不通' % port) def disk():   connect1()   stdin1, stdout1, stderr1 = ssh.exec_command(disk_cmd)   disk1 = int(stdout1.read().decode('utf-8'))   print('%s节点disk剩余空间为%sM' % (rs1_ip,disk1))   if disk1 <= 200:     mail(rs1_ip,'disk剩余空间为%sM' % disk1)   connect2()   stdin2, stdout2, stderr2 = ssh.exec_command(disk_cmd)   disk2 = int(stdout2.read().decode('utf-8'))   print('%s节点disk剩余空间为%sM' % (rs2_ip, disk2))   if disk2 <= 200:     mail(rs2_ip, 'disk剩余空间为%sM' % disk2) def cpu():   connect1()   stdin1, stdout1, stderr1 = ssh.exec_command(cpu_cmd)   cpu1 = int(stdout1.read().decode('utf-8'))   cpu = 100 - cpu1   print('%s节点cpu使用率为百分之%s' % (rs1_ip, cpu))   if cpu >= 80:     mail(rs1_ip, 'cpu使用量为%s' % cpu)   connect2()   stdin2, stdout2, stderr2 = ssh.exec_command(cpu_cmd)   cpu2 = int(stdout2.read().decode('utf-8'))   cpu = 100 - cpu2   print('%s节点cpu使用率为百分之%s' % (rs2_ip, cpu))   if cpu >= 80:     mail(rs2_ip, 'cpu使用量为%s' % cpu) def free():   connect1()   stdin1, stdout1, stderr1 = ssh.exec_command(free_cmd)   free1 = int(stdout1.read().decode('utf-8'))   print('%s节点磁盘剩余空间为%sM' % (rs1_ip, free1))   if free1 <= 200:     mail(ds_ip, '磁盘剩余空间为%sM' % free1)   connect2()   stdin2, stdout2, stderr2 = ssh.exec_command(disk_cmd)   free2 = int(stdout2.read().decode('utf-8'))   print('%s节点磁盘剩余空间为%sM' % (rs2_ip, free2))   if free2 <= 200:     mail(ds_ip, '磁盘剩余空间为%sM' % free2) def main():   while True:     http()     cpu()     free()     disk()     time.sleep(60) if __name__ == '__main__':   main()

四、用python编写一键部署数据库主从服务

主服务器

import pexpect import os import configparser # HOSTNAME_DB1='db1' # HOSTNAME_DB2='db2' # DB1 = '192.168.254.24' # DB2 = '192.168.254.27' DBPASSWORD = '1' def repo():   os.system('touch /etc/yum.repos.d/mariadb.repo')   with open('/etc/yum.repos.d/mariadb.repo','w',encoding='utf8') as f:     f.write('[mariadb]')   config = configparser.ConfigParser()   config.read("/etc/yum.repos.d/mariadb.repo", encoding="utf-8")   config.set('mariadb', 'name', 'MariaDB')   config.set('mariadb', 'baseurl', 'http://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos7-amd64/')   config.set('mariadb', 'gpgkey', 'http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB')   config.set('mariadb', 'gpgcheck', '1')   config.write(open('/etc/yum.repos.d/mariadb.repo','w')) def mariadb():   a = os.system('yum install MariaDB -y &> /dev/null')   if a == 0:     b = os.system('systemctl start mariadb &> /dev/null')     if b == 0:       print('mariadb启动成功')     child = pexpect.spawn('mysql_secure_installation')     child.expect('enter for none')     child.sendline('')     child.expect('Y/n')     child.sendline('y')     child.expect('New')     child.sendline(DBPASSWORD)     child.expect('Re-enter')     child.sendline(DBPASSWORD)     child.expect('successfully')     child.sendline('')     child.sendline('')     child.sendline('')     child.sendline('')     child.interact()     child.close() def db1():   config = configparser.ConfigParser()   config.read("/etc/my.cnf.d/server.cnf", encoding="utf-8")   config.set('mysqld', 'server-id', '1')   config.set('mysqld', 'log-bin', 'mysql-bin')   config.write(open('/etc/my.cnf.d/server.cnf','w'))   b = os.system('systemctl restart mariadb')   if b == 0:     # os.system('mysql -uroot -p%s' % DBPASSWORD)     # os.system("CREATE USER 'slave'@'%' IDENTIFIED BY 'slave';")     # os.system("GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';")     # os.system('flush privileges;')     # os.system('show master status')     child = pexpect.spawn('mysql -uroot -p1')     child.expect('none')     child.sendline("CREATE USER 'slave'@'%' IDENTIFIED BY 'slave';")     child.expect('none')     child.sendline("GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';")     child.expect('none')     child.sendline('flush privileges;')     child.expect('none')     child.sendline('show master status;')     child.interact()     child.close() def main():   repo()   mariadb()   db1() if __name__ == '__main__':   main()

从服务器

import pexpect import os import configparser # HOSTNAME_DB1='db1' # HOSTNAME_DB2='db2' DB1 = '192.168.102.143' # DB2 = '192.168.254.27' DBPASSWORD = '1' def repo():   os.system('touch /etc/yum.repos.d/mariadb.repo')   with open('/etc/yum.repos.d/mariadb.repo','w',encoding='utf8') as f:     f.write('[mariadb]')   config = configparser.ConfigParser()   config.read("/etc/yum.repos.d/mariadb.repo", encoding="utf-8")   config.set('mariadb', 'name', 'MariaDB')   config.set('mariadb', 'baseurl', 'http://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos7-amd64/')   config.set('mariadb', 'gpgkey', 'http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB')   config.set('mariadb', 'gpgcheck', '1')   config.write(open('/etc/yum.repos.d/mariadb.repo','w')) def mariadb():   a = os.system('yum install MariaDB -y')   if a == 0:     b = os.system('systemctl start mariadb &> /dev/null')     if b == 0:       print('mariadb启动成功')     child = pexpect.spawn('mysql_secure_installation')     child.expect('enter for none')     child.sendline('')     child.expect('Y/n')     child.sendline('y')     child.expect('New')     child.sendline(DBPASSWORD)     child.expect('Re-enter')     child.sendline(DBPASSWORD)     child.expect('successfully')     child.sendline('')     child.sendline('')     child.sendline('')     child.sendline('') def db2():   config = configparser.ConfigParser()   config.read("/etc/my.cnf.d/server.cnf", encoding="utf-8")   config.set('mysqld', 'server-id', '2')   config.write(open('/etc/my.cnf.d/server.cnf','w'))   b = os.system('systemctl restart mariadb')   if b == 0:     bin = 'mysql-bin.000001'     pos = 765     # os.system('mysql -uroot -p%s' % DBPASSWORD)     # os.system('''mysql -uroot -p%s -e "CHANGE MASTER TO MASTER_HOST='%s', MASTER_USER='slave', MASTER_PASSWORD='slave', MASTER_LOG_FILE='%s', MASTER_LOG_POS=%s;"''' % (DBPASSWORD,DB1,bin,pos))     # os.system("mysql -uroot -p%s -e 'start slave;'" % DBPASSWORD)     child = pexpect.spawn('mysql -uroot -p%s' % DBPASSWORD)     child.expect('none')     child.sendline("CHANGE MASTER TO MASTER_HOST='%s', MASTER_USER='slave', MASTER_PASSWORD='slave', MASTER_LOG_FILE='%s', MASTER_LOG_POS=%s;" % (DB1,bin,pos))     child.expect('none')     child.sendline( 'start slave;' )     child.interact()     child.close() def main():   repo()   mariadb()   db2() if __name__ == '__main__':   main()

感谢你能够认真阅读完这篇文章,希望小编分享的“python常用运维脚本的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI