开发脚本自动部署及监控
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
fi

b.部署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
fi

c.在部署了一台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.log

d.执行验证

3.编写计划任务,定时运行监控脚本,完成监控操作

a.制定计划任务

[root@ym script]# crontab -e -u root

b.计划任务内容

*     *     *     *      *    command

分   时    日    月     周               具体参考  man 5 crontab

注意:尽量全部使用绝对路径(包括命令,也使用命令的绝对路径)

c.显示已经制定的计划任务

[root@ym script]# crontab -l

d.监控正在执行的计划任务

[root@ym script]# tail -f /var/log/cron

e. 邮件验证

Python之路-shell&计划任务的更多相关文章

  1. python之路,Day24 常用设计模式学习

    python之路,Day24 常用设计模式学习   本节内容 设计模式介绍 设计模式分类 设计模式6大原则 1.设计模式介绍 设计模式(Design Patterns) --可复用面向对象软件的基础 ...

  2. Python之路,Day21 - 常用算法学习

    Python之路,Day21 - 常用算法学习   本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的 ...

  3. Python之路,Day15 - Django适当进阶篇

    Python之路,Day15 - Django适当进阶篇   本节内容 学员管理系统练习 Django ORM操作进阶 用户认证 Django练习小项目:学员管理系统设计开发 带着项目需求学习是最有趣 ...

  4. Python之路,Day14 - It's time for Django

    Python之路,Day14 - It's time for Django   本节内容 Django流程介绍 Django url Django view Django models Django ...

  5. 小白的Python之路 day1

    Python之路,Day1 - Python基础1 本节内容 Python介绍 发展史 Python 2 or 3? 一. Python介绍 python的创始人为吉多·范罗苏姆(Guido van ...

  6. NO.3:自学python之路------集合、文件操作、函数

    引言 本来计划每周完成一篇Python的自学博客,由于上一篇到这一篇遇到了过年.开学等杂事,导致托更到现在.现在又是一个新的学期,春天也越来越近了(冷到感冒).好了,闲话就说这么多.开始本周的自学Py ...

  7. python之路-进程

    博客园 首页 新随笔 联系 管理 订阅 随笔- 31  文章- 72  评论- 115    python之路——进程   阅读目录 理论知识 操作系统背景知识 什么是进程 进程调度 进程的并发与并行 ...

  8. Python之路【第一篇】python基础

    一.python开发 1.开发: 1)高级语言:python .Java .PHP. C#  Go ruby  c++  ===>字节码 2)低级语言:c .汇编 2.语言之间的对比: 1)py ...

  9. Python之路

    Python学习之路 第一天   Python之路,Day1 - Python基础1介绍.基本语法.流程控制              第一天作业第二天   Python之路,Day2 - Pytho ...

随机推荐

  1. 使用JDT.AST解析java源码

    在做java源码的静态代码审计时,最基础的就是对java文件进行解析,从而获取到此java文件的相关信息: 在java文件中所存在的东西很多,很复杂,难以用相关的正则表达式去一一匹配.但是,eclip ...

  2. xml中的SQL注入

    大家通常知道xml中大部分会导致外部实体注入,但是,xml也会出现SQL注入: 在xml中正常的sql语句写法有两种: 第一: <select id="selectById" ...

  3. 初探Lambda表达式/Java多核编程【4】Lambda变量捕获

    这周开学,上了两天感觉课好多,学校现在还停水,宿舍网络也还没通,简直爆炸,感觉能静下心看书的时间越来越少了...寒假还有些看过书之后的存货,现在写一点发出来.加上假期两个月左右都过去了书才看了1/7都 ...

  4. 读书笔记 effective c++ Item 25 实现一个不抛出异常的swap

    1. swap如此重要 Swap是一个非常有趣的函数,最初作为STL的一部分来介绍,它已然变成了异常安全编程的中流砥柱(Item 29),也是在拷贝中应对自我赋值的一种普通机制(Item 11).Sw ...

  5. 两款【linux字符界面下】显示【菜单】,【选项】的powershell脚本模块介绍

    两款[linux字符界面下]显示[菜单],[选项]的powershell脚本模块介绍 powershell linux  ps1 menu choice Multiselect 传教士 菜单 powe ...

  6. 面对考试毫无畏惧的SSH

    [Struts+Spring+Hibernate] 新建一个项目 把SSH jar包(包含mysql.oracle.jackson等包在里面) 把web.xml复制到WebContent\WEB-IN ...

  7. MySQL Sniffer

    MySQL Sniffer 是360开源的一个基于 MySQL 协议的抓包工具, 能实时抓取客户端端请求,并格式化输出操作语句,操作十分简单.对于问题的定位,操作的审核是个不错的利器. Github地 ...

  8. 2.css字体单位

    这期简单说说css字体单位 字体单位有三种:px.em.rem 任意浏览器的默认字体高都是16px.所有未经调整的浏览器都符合: 1em=16px. % 百分比 in 英寸 cm 厘米 mm 毫米 e ...

  9. 队列工厂之(MSMQ)

    最近vs2017神器正式版发布让人很是激动,vs2017支持了很多语言的开发,从前端-后端-底层的支持,堪称是工具中的神器:netcore我喜爱的架构之一也得到了大力的宣传,应群友的邀请将在队列工厂( ...

  10. Gridview AutoGenerateColumns属性

    第一篇随笔,以后会陆续的把刚开始工作时的知识点都记录下来,毕竟现在用WebForm的不多了~ AutoGenerateColumns MSDN 说明 : 获取或设置一个值,该值指示是否为数据源中的每个 ...