Python之路-shell&计划任务
开发脚本自动部署及监控
1.编写脚本自动部署反向代理、web、nfs;
要求: I、部署nginx反向代理三个web服务,调度算法使用加权轮询;
II、所有web服务使用共享存储nfs,保证所有web都对其有读写权限,保证数据一致性;
编写的部署脚本有两个,分别为nginx部署脚本和nfs部署脚本,根据IP检测要部署到的主机是服务器或者是客户端,识别出来后,执行不同的安装配置操作。
a.部署nginx
#!/bin/bash
#Deploy_Web to : deploy nginx
function Pre_Action(){
yum clean all
yum install epel* -y
if [ $? -eq ]
then
echo 'epel_package install right'
else
echo 'epel_package install ERROR!!!'
fi
yum clean all
yum install nginx -y
if [ $? -eq ]
then
echo 'nginx_package install right'
else
echo 'nginx_pacage install ERROR'
fi
}
function Close_Wall(){
systemctl stop firewalld #close firewall
setenforce #close selinux
iptables –L #clear tables
systemctl disable firewalld #disable
}
function Restart_service(){
systemctl start nginx #start nginx
if [ $? -eq ]
then
echo 'nginx_service start!!!'
else
systemctl restart nginx
if [ $? -eq ]
then
echo 'nginx_service start!!!'
else
echo 'nginx_servive is not good!!!'
fi
fi
}
function Cilent_conf(){
Pre_Action
Close_Wall
Restart_service
}
function Server_conf(){
Cilent_conf
msg='upstream mserver{ server 192.168.0.115 weight=3;server 192.168.0.116;server 192.168.0.117; }' #访问web115的权重为3
sed -ri "/^http/a $msg" /etc/nginx/nginx.conf #增加upstream
sed -ri "/^ *location \/ \{$/a proxy_pass http://mserver\;" /etc/nginx/nginx.conf #修改localtion
systemctl restart nginx #重启nginx服务
} ipaddr=`ifconfig|awk 'NR==2{print $2}'`
echo $ipaddr
if [ "$ipaddr" = '192.168.0.114']
then
Server_conf
else
Cilent_conf
fib.部署nfs
#!/bin/bash
#start nfs_service
function nfs_pre(){
yum clean all
yum install rpcbind nfs-utils -y
if [ $? -eq ]
then
echo 'nfs_package install right!!!'
else
echo 'nfs_package install ERROR!!!'
exit
fi
} function Server_conf(){
mkdir /share
echo '/share 192.168.0.0/24(rw,sync,fsid=0)' > /etc/exports
# head - /etc/exports
chmod -R /share
}
function Client_conf(){
# mkdir /data_disk
mount -t nfs 192.168.0.118:/share /usr/share/nginx/html
if [ $? -eq ]
then
echo 'mount successful!!!'
else
echo 'mount failed!!!'
exit
fi
} function nfs_start(){
systemctl enable nfs-server.service
systemctl enable rpcbind.service systemctl start rpcbind.service
if [ $? -eq ]
then
echo 'rpcbind start!!!'
else
systemctl restart rpcbind.service
if [ $? -eq ]
then
echo 'rpcbind_service start!!!'
else
echo 'rpcbind_servive is not good!!!'
fi
fi
systemctl start nfs-server.service
if [ $? -eq ]
then
echo 'nfs-server start!!!'
else
systemctl restart nfs-server.service
if [ $? -eq ]
then
echo 'nfs-server start!!!'
else
echo 'nfs-server is not good!!!'
fi
fi
exportfs
}
ipaddr=`ifconfig|awk 'NR==2{print $2}'`
echo $ipaddr
if [ "$ipaddr" = '192.168.0.118' ]
then
nfs_pre
Server_conf
nfs_start
else
nfs_pre
nfs_start
Client_conf
systemctl restart nginx
if [ $? -eq ]
then
echo 'nfs-server restart!!!'
else
echo 'nfs-server restart fail!!!'
fi
fic.在部署了一台nginx反向代理服务器,三台web服务器和一台nfs共享存储服务器后,在共享服务器的/share目录下创建了文件suc.txt。用浏览器访问nginx反向代理服务器的IP验证。
2.编写监控脚本,监控集群内所有服务存活状态,内存、磁盘剩余率检测,异常则发送报警邮件
a.要监控的服务有nginx和nfs是否关闭,还监控着内存和磁盘剩余率,其中磁盘剩余分为inode使用情况和内存空间使用情况
b.第三方邮件
[root@ym script]# vim /usr/bin/my_mail具体使用参考 http://www.cnblogs.com/linhaifeng/p/6602149.html#_label7
c.监控脚本如下
#!/bin/bash
cpu_limit= #cpu使用超过50%
mem_limit= #内存使用超过50%发送邮件
disk='/dev/sda1' #需要监控的磁盘名
disk_inode_limit= #磁盘inode使用
disk_space_limit= #磁盘空间使用
function m_nginx(){
ps aux |grep nginx|grep -v grep &> /dev/null
if [ $? -eq ]
then
echo 'nginx is normal'
else
msg="TIME:$(date +%F_%T)
HOSTNAME:$(hostname)
IPADDR:$(/usr/sbin/ifconfig|awk 'NR==2{print $2}')
MSG:nginx is stop!!!"
echo $msg
/usr/bin/my_mail $msg
fi
} function m_nfs(){
ps aux |grep nfs|grep -v grep &> /dev/null
if [ $? -eq ]
then
echo 'nfs is normal'
else
msg="TIME:$(date +%F_%T)
HOSTNAME:$(hostname)
IPADDR:$(/usr/sbin/ifconfig|awk 'NR==2{print $2}')
MSG:nfs is stop!!!"
echo $msg
/usr/bin/my_mail $msg
fi
}
function m_mem(){
mem_total=`free |awk 'NR==2{print $2}'`
mem_use=`free |awk 'NR==2{print $3}'`
mem_per=`echo "scale=2;$mem_use/$mem_total" |bc -l|cut -d. -f2`
if [ $mem_per -gt $mem_limit ]
then
msg="TIME:$(date +%F_%T)
HOSTNAME:$(hostname)
IPADDR:$(/usr/sbin/ifconfig |awk 'NR==2{print $2}')
MSG:Memory usage exceeds the limit,current value is ${mem_per}%"
echo $msg
/usr/bin/my_mail $msg
fi
}
function m_disk_inode(){
inode_use=`df -i $disk |awk 'NR==2{print $5}' |cut -d% -f1`
if [ $inode_use -gt $disk_inode_limit ]
then
msg="TIME:$(date +%F_%T)
HOSTNAME:$(hostname)
IPADDR:$(/usr/sbin/ifconfig |awk 'NR==2{print $2}')
MSG:Disk inode usage exceeds the limit,current value is ${inode_use}%"
echo $msg
/usr/bin/my_mail $msg
fi
} function m_disk_space(){
space_use=`df $disk |awk 'NR==2{print $5}'|cut -d% -f1`
if [ $space_use -gt $disk_space_limit ]
then
msg="TIME:$(date +%F_%T)
HOSTNAME:$(hostname)
IPADDR:$(/usr/sbin/ifconfig |awk 'NR==2{print $2}')
MSG:Disk space usage exceeds the limit,current value is ${space_use}%"
echo $msg
/usr/bin/my_mail $msg
fi
}
m_nginx &>> /tmp/monitor.log
m_nfs &>> /tmp/monitor.log
m_mem &>> /tmp/monitor.log
m_disk_inode &>> /tmp/monitor.log
m_disk_space &>> /tmp/monitor.logd.执行验证
3.编写计划任务,定时运行监控脚本,完成监控操作
a.制定计划任务
[root@ym script]# crontab -e -u rootb.计划任务内容
* * * * * command
分 时 日 月 周 具体参考 man 5 crontab
注意:尽量全部使用绝对路径(包括命令,也使用命令的绝对路径)
c.显示已经制定的计划任务
[root@ym script]# crontab -ld.监控正在执行的计划任务
[root@ym script]# tail -f /var/log/crone. 邮件验证
Python之路-shell&计划任务的更多相关文章
- python之路,Day24 常用设计模式学习
python之路,Day24 常用设计模式学习 本节内容 设计模式介绍 设计模式分类 设计模式6大原则 1.设计模式介绍 设计模式(Design Patterns) --可复用面向对象软件的基础 ...
- Python之路,Day21 - 常用算法学习
Python之路,Day21 - 常用算法学习 本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的 ...
- Python之路,Day15 - Django适当进阶篇
Python之路,Day15 - Django适当进阶篇 本节内容 学员管理系统练习 Django ORM操作进阶 用户认证 Django练习小项目:学员管理系统设计开发 带着项目需求学习是最有趣 ...
- Python之路,Day14 - It's time for Django
Python之路,Day14 - It's time for Django 本节内容 Django流程介绍 Django url Django view Django models Django ...
- 小白的Python之路 day1
Python之路,Day1 - Python基础1 本节内容 Python介绍 发展史 Python 2 or 3? 一. Python介绍 python的创始人为吉多·范罗苏姆(Guido van ...
- NO.3:自学python之路------集合、文件操作、函数
引言 本来计划每周完成一篇Python的自学博客,由于上一篇到这一篇遇到了过年.开学等杂事,导致托更到现在.现在又是一个新的学期,春天也越来越近了(冷到感冒).好了,闲话就说这么多.开始本周的自学Py ...
- python之路-进程
博客园 首页 新随笔 联系 管理 订阅 随笔- 31 文章- 72 评论- 115 python之路——进程 阅读目录 理论知识 操作系统背景知识 什么是进程 进程调度 进程的并发与并行 ...
- Python之路【第一篇】python基础
一.python开发 1.开发: 1)高级语言:python .Java .PHP. C# Go ruby c++ ===>字节码 2)低级语言:c .汇编 2.语言之间的对比: 1)py ...
- Python之路
Python学习之路 第一天 Python之路,Day1 - Python基础1介绍.基本语法.流程控制 第一天作业第二天 Python之路,Day2 - Pytho ...
随机推荐
- QT编程环境搭建
使用QT需要QT的库以及QT creator,在QT5以后的版本中,两者已经集成,不需要单独下载了,只需要下载一个文件即可.配置步骤如下: 1.下载qt-opensource-windows-x86- ...
- JAVA设计模式:单例设计
1.单例设计Singleton的引出 单例设计,从名字上首先可以看出单---即只有一个,例---只的是实例化对象:那么单例也就是说一个类,只产生了一个实例化对象.但是我们都知道,一个类要产生实例化对象 ...
- BZOJ 4086: [Sdoi2015]travel(SDOI2015 round2 day1)(分类讨论+容斥原理)
描述:给定一张图(n<1000,m<5000)求有多少点对u,v有不重复经过其他点,共经过k个点的路径.(k<=7) 这个做法应该不是正解吧..顺便说下SDOI的几道题在BZ上都要卡 ...
- SDOI Day1
好了做了SDOI day1的3道题,来讲下做法及感想吧 T1:排序(暴力,搜索) 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3990 我们可 ...
- BZOJ 3391: [Usaco2004 Dec]Tree Cutting网络破坏(搜索)
这道直接遍历一遍求出每个点的子节点数目就行了= = CODE: #include<cstdio>#include<iostream>#include<algorithm& ...
- B/S架构与C/S架构的区别
C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势. ...
- 每天一个linux命令(54)--watch命令
watch是一个非常实用的命,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省的你一遍遍的手动运行,在Linux下,watch是周期性的执行下个程 ...
- Spark集群搭建_YARN
2017年3月1日, 星期三 Spark集群搭建_YARN 前提:参考Spark集群搭建_Standalone 1.修改spark中conf中的spark-env.sh 2.Spark on ...
- 常见的html面试题
1.doctype作用?标准模式和兼容模式各有什么区别? (1).<doctype>声明位于文档第一行,在<html>标签之前.用于告知浏览器的解析器以什么样的标准解析该文档. ...
- react学习总结
http://www.runoob.com/react/react-tutorial.html一般先看一些中文的简单的介绍和一些基本概念http://reactjs.cn/react/docs/get ...