首页 文章 精选 留言 我的

精选列表

搜索[AI运维],共10000篇文章
优秀的个人博客,低调大师

BigOps自动化运维安装以及所遇故障处理

本文参考官方文档进行安装,以及在安装中所遇到的问题呈现给大家。废话就不说了,开始安装。一、准备工作:本机系统环境是CentOS 7 x86 64位 硬件配置建议物理内存8G+、CPU 4 cores+、硬盘20G+。内存低于6G无法安装BigOps程序,所以内存必须6+。1.操作系统CentOS 7 x86 64位 (推荐使用7以上版本,使用7以下版本请参考官网文档)官方文档URL:http://docs.bigops.com/er-jin-zhi-an-zhuang/zhun-bei-huan-jing.html 服务 端口 统一认证 30000、30001 work后端 30002、30003 预留 30004、30005 dv后端 30006、30007 confluence 30008、30009 jira 30010、30011 jenkins 30012、30013 kibana 5601 cerebro 9000 elasticsearch-head 9100 elasticsearch 9200、9300 2.准备2域名(1)sso.xxxx.com,用于统一认证(2)work.xxxx.com,用于主站如果没有注册域名,需要给服务器和笔记本都配置hosts。Linux位置/etc/hosts。Windows位置C:\Windows\System32\drivers\etc\hosts,如果不能直接编辑,可以先拷贝到桌面,编辑完在拷贝回原位置。配置内容,例如:192.168.100.2 sso.bigops.com (换成你服务器IP和你自己的域名)192.168.100.2 work.bigops.com (换成你服务器IP和你自己的域名)切记2个域名都要设置!切记!切记!切记!切记服务器和你的笔记本都要设置!切记!切记!切记!3.初始化环境[root@localhost ~]#cd /usr/local/src[root@localhost src]# wget -O centos_init_env.sh https://raw.githubusercontent.com/yunweibang/bigops-install/master/centos_init_env.sh[root@localhost src]# chmod +x centos_init_env.sh[root@localhost src]# sh centos_init_env.sh 注:建议将所需下载的文件统一放在一个目录下,好管理也好处理。4.关闭IPv6(可选)centos 7编辑/etc/default/grub,在GRUB_CMDLINE_LINUX的值里添加ipv6.disable=1,例如:GRUB_CMDLINE_LINUX="ipv6.disable=1 crashkernel=auto rhgb quiet idle=halt biosdevname=0 net.ifnames=0 console=tty0 console=ttyS0,115200n8 noibrs"再运行命令[root@localhost ~]#grub2-mkconfig -o /boot/grub2/grub.cfg重启系统[root@localhost ~]#reboot5.获取安装包百度网盘地址:地址:https://pan.baidu.com/s/1y8JyQJIUWnzDiH0fX2EpcQ密码:76cm二、安装待初始化系统完成以后,我们进行BigOps环境和BigOps软件安装(1)安装MySQL(推荐使用)[root@localhost src]# wget -O mysql80.sh https://raw.githubusercontent.com/yunweibang/bigops-install/master/mysql80.sh[root@localhost src]#chmod +x mysql80.sh[root@localhost src]# sh mysql80.sh看到下面提示,输入root@127.0.0.1用户密码,保存好一会使用。另外root@localhost密码为空 please input root@127.0.0.1 password, default bigops/>输入你的密码优化MySQL,修改/etc/my.cnf里innodb_buffer_pool_size的值,用命令计算:说明:BigOps系统占用4G,所以innodb_buffer_pool_size等于总内存减去4G后的70%到80% [root@localhost ~]# free -g|egrep -i ^mem|awk '{if($2<7) print "memory is too small";else print int(($2-4)*0.8)"G"}' 比如上面命令返回8G,就这样设置:innodb_buffer_pool_size=8G修改完后需要重启MySQL(2) 安装BigOps程序[root@localhost src]#tar -zxvf bigops-1.0.1.tar.gz[root@localhost src]# mv bigops-1.0.1 bigops[root@localhost src]# cd bigops/bin/[root@localhost bin]# chmod +x bigserver.sh[root@localhost bin]# sh bigserver.sh根据提示填写相关信息,设置完后服务会自动启动。dbhost不要填localhost,填127.0.0.1或对应IP 检查BigOps数据库的tables是否是大小写组合拼写。如果表名都是小写就有问题如果不是请根据官方常见问题文档进行修改。URL:http://docs.bigops.com/er-jin-zhi-an-zhuang/an-zhuang-chang-jian-wen-ti.html检查服务端口有无启动[root@localhost bin]# netstat -nptl | grep 3000检查Nginx状态检查Nginx域名是否配置正确[root@localhost ~]#cat /etc/nginx/conf.d/sso.conf[root@localhost ~]#cat /etc/nginx/conf.d/work.conf[root@localhost bin]# ps aux|grep nginx.conf注:问题在此处我遇到sso.conf和work.conf、default.conf、zabbix.conf文件是空白的,服务重启后Nginx服务无法启动。解决下载配置文件,替换并修改sso.conf、default.conf、work.conf、zabbix.conf里的域名为你网站的域名[root@localhost ~]#wget -O /etc/nginx/nginx.conf https://raw.githubusercontent.com/yunweibang/bigops-install/master/nginx/nginx.conf [root@localhost ~]#wget -O /etc/nginx/conf.d/default.conf https://raw.githubusercontent.com/yunweibang/bigops-install/master/nginx/conf.d/default.conf [root@localhost ~]#wget -O /etc/nginx/conf.d/sso.conf https://raw.githubusercontent.com/yunweibang/bigops-install/master/nginx/conf.d/sso.conf [root@localhost ~]#wget -O /etc/nginx/conf.d/work.conf https://raw.githubusercontent.com/yunweibang/bigops-install/master/nginx/conf.d/work.conf [root@localhost ~]#wget -O /etc/nginx/conf.d/zabbix.conf https://raw.githubusercontent.com/yunweibang/bigops-install/master/nginx/conf.d/zabbix.conf替换修改后Nginx服务正常启动 检查sso服务是否正常启动[root@localhost bin]# curl 127.0.0.1:30001/signin/login如果返回值包括「sso系统正常」,说明运行正常,如果没有返回值说明有问题,需要详细检查数据库配置。检查work服务是否正常启动[root@localhost bin]# curl 127.0.0.1:30003/api/common/ssourl/{"code":0,"message":"ok","data":{"url":"http://sso.swwbigops.com"}}[root@localhost bin]# 如果返回「message」为ok就是正常启动bigserver,bigserver服务用于执行一些内置任务[root@localhost ~]#/usr/local/src/bigops/bin/bigserver.sh restartbigserver配置文件在/usr/local/src/bigops/bin/bigserver.properties可以根据需要调整轮询时间设置定时清理日志[root@localhost ~]#crontab -e 00 01 * /bin/sh /opt/bigops/bin/clean_log.sh 添加开机启动服务 [root@localhost ~]#wget -O /usr/lib/systemd/system/bigweb.service https://raw.githubusercontent.com/yunweibang/bigops-install/master/bigweb.service [root@localhost ~]#systemctl enable bigweb [root@localhost ~]#chmod 754 /usr/lib/systemd/system/bigweb.service [root@localhost ~]#wget -O /usr/lib/systemd/system/bigserver.service https://raw.githubusercontent.com/yunweibang/bigops-install/master/bigserver.service [root@localhost ~]#systemctl enable bigserver [root@localhost ~]#chmod 754 /usr/lib/systemd/system/bigserver.service [root@localhost ~]#systemctl enable nginx [root@localhost ~]#systemctl enable mysqld登录测试访问域名:http://work.swwbigops.com (就是你刚才设置的home url) 默认账号:admin 默认密码:bigops 登陆后请尽快修改密码。软件登录界面展示

优秀的个人博客,低调大师

MySQL运维实战 之 PHP访问MySQL你使用对了吗

大家都知道,slow query系统做的好不好,直接决定了解决slow query的效率问题 一个数据库管理平台,拥有一个好的slow query系统,基本上就拥有了解锁性能问题的钥匙 但是今天主要分享的并不是平台,而是在平台中看到的奇葩指数五颗星的slow issue 好了,关子卖完了,直接进入正题 一、症状 一堆如下慢查询 # User@Host: cra[cra] @ [xx] Id: 3352884621 # Query_time: 0.183673 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 use xx_db; SET timestamp=1549900927; # administrator command: Prepare; # Time: 2019-02-12T00:02:07.516803+08:00 # User@Host: cra[cra] @ [xx] Id: 3351119968 # Query_time: 0.294081 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 SET timestamp=1549900927; # administrator command: Prepare; 从我们的监控图上可以看到,每天不定时间段的slow query 总数在攀升,但是却看不到任何query 语句 这是我接触到的slow query优化案例中从来没有过的情况,比较好奇,也比较兴奋,至此决心要好好看看这个问题 二、排查 要解决这个问题,首先想到的是,如何复现这个问题,如何模拟复现这个症状 MySQL客户端 模拟prepare * 模拟 root:xx> prepare stmt1 from 'select * from xx_operation_log where id = ?'; Query OK, 0 rows affected (0.00 sec) Statement prepared * 结果 # Time: 2019-02-14T14:14:50.937462+08:00 # User@Host: root[root] @ localhost [] Id: 369 # Query_time: 0.000105 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 SET timestamp=1550124890; prepare stmt1 from 'select * from xx_operation_log where id = ?'; 结论是: MySQL client 模拟出来的prepare 并不是我们期待的,并没有得到我们想要的 administrator command: Prepare perl 模拟prepare #!/usr/bin/perl use DBI; my $dsn = "dbi:mysql:database=${db_name};hostname=${db_host};port=${db_port}";#数据源 #获取数据库句柄 my $dbh = DBI->connect("DBI:mysql:database=xx;host=xx", "xx", "xx", {'RaiseError' => 1}); my $sql = qq{select * from xx_operation_log where id in (?)}; my $sth = $dbh->prepare($sql); $sth->bind_param (1, '100'); sleep 3; $sth->execute(); 结论是:跟MySQL客户端一样,同样是看不到administrator command: Prepare php 模拟prepare 1. 官方网址: https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli-stmt.prepare.html <?php $link = mysqli_connect("xx", "dba", "xx", "xx_db"); /* check connection */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $city = '1'; /* create a prepared statement */ $stmt = mysqli_stmt_init($link); if (mysqli_stmt_prepare($stmt, 'select * from xx_operation_log where id in (1,2,3)'){ /* bind parameters for markers */ /* mysqli_stmt_bind_param($stmt, "s", $city); /* execute query */ mysqli_stmt_execute($stmt); /* bind result variables */ mysqli_stmt_bind_result($stmt, $district); /* fetch value */ mysqli_stmt_fetch($stmt); printf("%s is in district %s\n", $city, $district); /* close statement */ mysqli_stmt_close($stmt); } /* close connection */ mysqli_close($link); ?> php模拟得到的slow 结果 [root@xx 20190211]# cat xx-slow.log | grep 'administrator command: Prepare' -B4 | grep 'User@Host' | grep 'xx_rx' | wc -l 7891 [root@xx 20190211]# cat xx-slow.log | grep 'administrator command: Prepare' -B4 | grep 'User@Host' | wc -l 7908 结论: 通过php代码,我们成功模拟出了想要的结果 那顺藤摸瓜,抓取下这段时间有相同session id的整个sql执行过程 MySQL开启slow=0的抓包模式 可以定位到同一个session id(3415357118) 的 prepare + execute + close stmt # User@Host: xx_rx[xx_rx] @ [xx.xxx.xxx.132] Id: 3415357118 # Query_time: 0.401453 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 use xx_db; SET timestamp=1550017125; # administrator command: Prepare; # Time: 2019-02-13T08:18:45.624671+08:00 -- # User@Host: xx_rx[xx_rx] @ [xx.xxx.xxx.132] Id: 3415357118 # Query_time: 0.001650 Lock_time: 0.000102 Rows_sent: 0 Rows_examined: 1 use xx_db; SET timestamp=1550017125; update `xx` set `updated_at` = '2019-02-13 08:18:45', `has_sales_office_phone` = 1, `has_presale_permit` = 1 where `id` = 28886; # Time: 2019-02-13T08:18:45.626138+08:00 -- # User@Host: xx_rx[xx_rx] @ [xx.xxx.xxx.132] Id: 3415357118 # Query_time: 0.000029 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 1 use xx_db; SET timestamp=1550017125; # administrator command: Close stmt; # Time: 2019-02-13T08:18:45.626430+08:00 结论:我们发现,prepare时间的确很长,但是sql语句却执行的很快,这就很尴尬了 本来是想通过抓包,看看是否能够验证我们的猜想: prepare的语句非常大,或者条件非常复杂,从而导致prepare在服务器端很慢结果发现query语句也都非常简单 那么既然如此,我们就找了业务方,将对应业务的prepare方法一起看看结果发现,业务使用的是php-pdo的方式,所以我们就又有了如下发现 php-pdo 两种prepare模式 http://php.net/manual/zh/pdo.prepare.php 1. 本地prepare $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,true); 不会发送给MySQL Server 2. 服务器端prepare $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); 发送给MySQL Server 验证两种prepare模式 服务端prepare模式( ATTR_EMULATE_PREPARES = false) <?php $dbms='mysql'; //数据库类型 $host='xxx'; //数据库主机名 $dbName='test'; //使用的数据库 $user='xx'; //数据库连接用户名 $pass='123456'; //对应的密码 $dsn="$dbms:host=$host;dbname=$dbName"; try { $pdo = new PDO($dsn, $user, $pass); //初始化一个PDO对象 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); echo "----- prepare begin -----\n"; $stmt = $pdo->prepare("select * from test.chanpin where id = ?"); echo "----- prepare after -----\n"; $stmt->execute([333333]); echo "----- execute after -----\n"; $rs = $stmt->fetchAll(); } catch (PDOException $e) { die ("Error!: " . $e->getMessage() . "<br/>"); } strace -s200 -f php mysql1.php 跟踪 大家可以看到这个模式下,prepare的时候,是将query+占位符 发送给服务端的 本地prepare模式 (ATTR_EMULATE_PREPARES = true ) <?php $dbms='mysql'; //数据库类型 $host='xx'; //数据库主机名 $dbName='test'; //使用的数据库 $user='xx'; //数据库连接用户名 $pass='123456'; //对应的密码 $dsn="$dbms:host=$host;dbname=$dbName"; try { $pdo = new PDO($dsn, $user, $pass); //初始化一个PDO对象 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,true); echo "----- prepare begin -----\n"; $stmt = $pdo->prepare("select * from test.chanpin where id = ?"); echo "----- prepare after -----\n"; $stmt->execute([333333]); echo "----- execute after -----\n"; $rs = $stmt->fetchAll(); } catch (PDOException $e) { die ("Error!: " . $e->getMessage() . "<br/>"); } strace -s200 -f php mysql1.php 跟踪 大家可以看到这个模式下,prepare的时候,是不会将query发送给服务端的,只有execute的时候才会发送 跟业务方确认后,他们使用的是后者,也就是修改了默认值,他们原本是想提升数据库的性能,因为预处理后只需要传参数就好了但是对于我们的业务场景并不适合,我们的场景是频繁打开关闭连接,也就是预处理基本就用不到 另外文档上面也明确指出prepared statements 性能会不好 调整和验证 如何验证业务方是否将prepare修改为local了呢? dba:(none)> show global status like 'Com_stmt_prepare'; +------------------+-----------+ | Variable_name | Value | +------------------+-----------+ | Com_stmt_prepare | 716836596 | +------------------+-----------+ 1 row in set (0.00 sec) 通过观察,发现这个值没有变化,说明调整已经生效 总结 prepare的优点 1. 防止SQL注入 2. 特定场景下提升性能 什么是特定场景: 就是先去服务端用占位符占位,后面可以直接发送请求来填空(参数值) 这样理论上来说, 你填空的次数非常多,性能才能发挥出来 prepare的缺点 1. 在服务器端的prepare毕竟有消耗,当并发量大,频繁prepare的时候,就会有性能问题 2. 服务端的prepare模式还会带来的另外一个问题就是,排错和slow 优化有困难,因为大部分情况下是看不到真实query的 3. 尽量设置php-pdo为 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,true) ,在本地prepare,不要给服务器造成额外压力 建议 1. 默认情况下,应该使用php-pdo的默认配置,采用本地prepare的方式,这样可以做到防SQL注入的效果,性能差不到哪里去 2. 除非真的是有上述说的特定场景,可以考虑配置成服务器prepare模式,前提是要做好测试

优秀的个人博客,低调大师

运维技术(一)用docker安装elk之CentOS7.4

一、一个新纯净的系统CentOS7.4使用官方安装脚本自动安装Docker[root@jiaxin-ceshi ~]# curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 查看版本:[root@jiaxin-ceshi ~]# docker version[root@jiaxin-ceshi ~]# service docker restart[root@jiaxin-ceshi ~]# docker search elk[root@jiaxin-ceshi ~]# docker pull sebp/elk等待下载完成[root@jiaxin-ceshi ~]# docker images查看下载好的镜像2、执行命令:docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -e ES_MIN_MEM=128m -e ES_MAX_MEM=1024m -it --name elk sebp/elk 将镜像运行为容器,由于我本机内存不符合安装要求,为了保证ELK能够正常运行,加了-e参数限制使用最小内存及最大内存。 以上报错了 修改vim /etc/sysctl.conf [root@jiaxin-ceshi ~]# vim /etc/sysctl.conf 加入一行:vm.max_map_count=262144使配置生效 [root@jiaxin-ceshi ~]# sysctl -p 重用docker运行 [root@jiaxin-ceshi ~]# docker run -d -p 5601:5601 -p 9200:9200 -p 5044:5044 -e ES_MIN_MEM=128m -e ES_MAX_MEM=1024m -it --name elk22 sebp/elk[root@jiaxin-ceshi ~]# docker ps 看到已经运行了 打开浏览器 http://IP:5601 完成咯~!

优秀的个人博客,低调大师

运维技术之一、supervisorctl 守护进程的安装和使用

一、安装:yum -y install supervisor二、编辑:vim /etc/supervisord.conf 例如添加一个进程: [program:eatjoys-prd-third];environment=PATH="/opt/py3/bin:%(ENV_PATH)s"directory=/work/product/eatjoys-prd-thirdcommand=java -Xmn256m -Xms384m -Xmx512m -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Djava.ext.dirs=./lib com.yutuoit.framework.start.StartWebApp -console -app=eatjoys-prd-thirdautostart=trueautorestart=truestdout_logfile=/work/var/logs/eatjoys-prd-third.logstderr_logfile=/work/var/logs/eatjoys-prd-third.error说明:[program:eatjoys-prd-third] eatjoys-prd-third 进程名字directory=/work/product/eatjoys-prd-third 启动进程所在目录command= 对应启动命令autostart=true 是否自动启动(是)autorestart=true是否自动重启(是)stdout_logfile=输出日志所在目录名字stderr_logfile=错误日志所在目录名字完成之后保存退出三、 supervisorctl error: , [Errno 2] No such file or directory: file: line: 1supervisor> 意思是没有启动的意思 /etc/init.d/supervisord restart 在次执行supervisorctl 输入help 可查看帮助下面安装一下jdkjdk-8u172-linux-x64.tar.gz下载并解压到/usr/local下 重命名mv jdk1.8.0_172/ jdk1.8打开vim /etc/profile并添加 jdk JAVA_HOME=/usr/local/jdk1.8JRE_HOME=/usr/local/jdk1.8/jrePATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/binCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$JAVA_HOME/jre/lib/ext/sunjce_provider.jarexport JAVA_HOME JRE_HOME PATH CLASSPATH 让配置环境生效source /etc/profilejava -version 创建进程目录mkdir /work/product/lib conf 日志目录等 cd /work/product 拉取代码git clone git@77.88.25.68:eatjoys-java/eatjys-prd-thrd.git

优秀的个人博客,低调大师

运维技术之二、docker安装跳板机jumpserver和使用

jumpserver官网http://www.jumpserver.org/一、安装docker安装[root@jiaxin-ceshi-ceshi work]#yum install docker-io启动[root@jiaxin-ceshi-ceshi work]#/etc/init.d/docker restart查看帮助docker help 搜索jumpserver镜像[root@jiaxin-ceshi-ceshi work]#docker search jumpserver下载[root@jiaxin-ceshi-ceshi work]#docker pull jiaxiangkong/jumpserver_docker:0.3.2[root@jiaxin-ceshi-ceshi work]# docker images2.运行下载好的 jumpserver[root@jiaxin-ceshi-ceshi work]# docker run --name=jumpserver -d -p 80:80 --restart=always 80e9ddba8da6[root@jiaxin-ceshi-ceshi ~]# docker ps删除正在运行的镜像[root@jiaxin-ceshi-ceshi ~]# docker kill eb56df2cdc66eb56df2cdc66[root@jiaxin-ceshi-ceshi ~]# docker ps[root@jiaxin-ceshi-ceshi ~]# docker ps -a[root@jiaxin-ceshi-ceshi ~]# docker run -d --restart=always -p 80:80 --name=jumservera 80e9ddba8da6 访问公网47.98.124.88 默认帐号密码admin 下面就添加服务器操作吧~! 补充点docker常用命令 进入容器docker exec -it 0cb8106bcb55 /bin/bash安装VIMapt-get install vimapt-get updateapt-get install vim docker rmi 删除镜像 docker help 帮助

优秀的个人博客,低调大师

Python Linux系统管理与自动化运维

Py't'hon语言与Linux系统管理 Py't'hon生态工具 打造命令行工具 文本处理 Linux系统管理 使用python监控Linux系统 文档与报告 网络 Python自动化部署 深入浅出Ansible 使用Python打造Mysql专家系统 启动简易下载器:python -m SimpleHTTPServer python -m SimpleHTTPServer python -m json.tool 格式化json image.png 临时python指令:python -c "print 'aaa'" pip升级:pip install -U pip pip常用指令 image.png 更改pip的安装源: vi ~/.pip/pip.conf [global] index-url=https://pypi.douban.com/simple/ 下载软件到本地安装: pip install --download='pwd' -r requirements.txt pip install --no-index -f file://'pwd' -r requirements.txt PDB调试器 image.png 启动pdb调试 image.png ipdb image.png pep8 一次导入一个模块 代码风格检查 image.png 将代码风格编排成PEP8 image.png pyenv进行python版本管理 image.png import sys sys.argv 所有参数 sys.stdin fileinput.input() sys.stdout sys.stderr sys.exit(1) 隐藏用户的输入 image.png ConfigParse解析配置文件 命令行参数解析类:argparse *** image.png image.png click + colorama 简直完美:https://www.cnblogs.com/xiao-apple36/p/9089027.html prompt_toolkit自动补全 image.png 历史提示,自动补全: image.png 历史提示,自动补全,TAB image.png with open('access.log') as f: for line in f: xx re image.png image.png re建议编译 search 返回第一次匹配,findall返回所有 获得超链接 image.png image.png string import template image.png jinja2 os.path路径管理 image.png 判断文件类型 image.png 查找最常用10条指令 image.png fnmatch 文件 image.png glob整个文件系统查找 image.png os.walk遍历 image.png 遍历及查找 image.png shutil文件管理 filecmp文件比较模块 hashlib MD5模块 image.png tarfile image.png zipfile image.png shutil加压缩 image.png subprocess image.png subprocess.check_output image.png 监控dstat\glances psutil获取CPU个数 image.png 获取CPU利用率 image.png image.png psutil.virtual_memory获取内存信息 image.png image.png 磁盘:disk_partitions image.png image.png image.png 返回系统启动时间 image.png psutil psutil

优秀的个人博客,低调大师

python linux 系统管理与自动化运维

pypdf2 图片:pillow 邮件:smtplib yagmail:简单发送邮件 image.png image.png 接收邮件:imapclient image.png settools打包 python-nmap image.png image.png ipy。。。。。。 dnspython... 同时处理多台服务器:polysh wget http://guichaz.free.fr/polysh/files/polysh-0.4.tar.gz tar -zxvf polysh-0.4.tar.gz cd polysh-0.4 python setup.py install 获取用户输入:pexcept paramiko:https://blog.csdn.net/l1028386804/article/details/79029041 脚本操作ssh fabric from fabric.api import * #导入fabric.api模块 env.hosts= ['192.168.122.101','192.168.122.102','192.168.122.103'] #指定远端服务器的ip地址。如果有dns解析的也可以写主机名。 env.password='indionce' #指定远端主机的密码,如果各个密码不相同可以使用一个字典指定,例如:env.password={“root@192.168.122.101”:"indionce"} @runs_once def local_uname(): #定义一个本地任务的函数 local('uname -r') def remote_uname(): #定义一个远程任务的函数 run('uname -r') def uname(): #定义一个函数,将本地与远端组合起来使用 local_uname() remote_uname() 查看列表 from fabric.api import * @runs_once #一定要指定这一条,否则会让你输入多次路径 def input(): return prompt("input path:") #prompt函数,让用户输入自己想要的路径,将输入的值返回到函数。 def ls_path(dirname): #在定义函数的时候指定形参。 run("ls -l "+dirname) def go(): ls_path(input()) #使用input返回的值,用于ls_path()的参数 处理异常 from fabric.api import * from fabric.contrib.console import * #这个模块中包含confirm def backup(): with settings(warn_only=True): #with命令表示执行这句后,执行下面的命令。使用settings命令来设置警告模式 state=local('mkdir /root/zz') #创建一个文件夹 if state.failed and not confirm("/root/zz is already exist,continue?"): #使用failed来判断state这条命令是否失败,失败了为真。confirm向用户确认是否继续,继续为真。如果命令失败了,并且用户希望停止,便通过if判断。 abort("退出任务") #abort是退出任务,有些类似python的exit。退出并且时返回给用户一串字符串 local('tar cavf /root/zz/etc.tar.gz /etc') #将etc的文件备份到/root/zz文件夹中 并行执行与顺序执行 @parallel #将下面的函数设为并行执行。 def runs_parallel(): run('uname -r') @serial #将下面的函数设为顺序执行(默认即为顺序执行 ) def runs_serially(): pass @parallel(pool_size=5) #将下面的函数设为并行执行,并且限制最多5个线程。 def runs_parallel(): pass

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册