开发脚本自动部署及监控
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. JAVA 命令行参数解析,org.apache.commons.cli的使用

    maven依赖引入 <dependency> <groupId>commons-cli</groupId> <artifactId>commons-cl ...

  2. php正则表达式(持续更新)

    1.字符串替换多个关键字 $pattern = array('/a/', '/a/', '/a/'); $replacement = array('x', 'y', 'z'); $subject = ...

  3. ShiWangMeSDK Android版接口文档 0.2.0 版

    # ShiWangMeSDK Android版接口文档 0.2.0 版 android 总共有 14 个接口,分别涉及到初始化和对界面的一些细节的控制.下面详细介绍接口,如果没有特殊说明,接口都在 S ...

  4. UE4从零搭建CF游戏关卡(蓝图篇)

    一 往关卡中放置物体 二 Static Mesh 和 BSP 从今天开始我们要建立一个类似CF游戏的场景,不写一句代码,纯蓝图实现. 三 英语学习 今天早上开会,经理说了一件让我震惊的事情,她说最近大 ...

  5. 网络性能测试工具Iperf/Jperf解读

    Iperf 是一个网络性能测试工具.Iperf 可以测试TCP 和UDP 带宽质量.Iperf 可以测量最大TCP 带宽,具有多种参数和UDP 特性. Iperf 可以报告带宽,延时抖动和数据包丢失. ...

  6. react配置之浅谈

    //复习 1 .块级作用域 let 和const 2 变量结构 默认值 一般往后写 rest参数(了解) 箭头函数(重要)(x,y)=>{} 3.map 存储高级键值对 4.set集合(去重) ...

  7. HDU---Labyrinth

    Labyrinth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  8. Eclipse:The selection cannot be launched,and there are no recent launches

    刚刚装上eclipse,于是就想写个Java程序来试试.结果写好之后不管是点击 run  还是  debug 结果都会弹出一个窗口,内容为: The selection cannot be launc ...

  9. linux系统常用快捷键

    centos 命令快捷键: 挂起:Ctrl+s 解除挂起:ctrl+q 清屏:Ctrl+l 注销或退出:Ctrl+d 命令行光标移动: Ctrl+a 移动到命令行首 Ctrl+e 移动到命令行尾 Ct ...

  10. 1854: [Scoi2010]游戏

    1854: [Scoi2010]游戏 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 2538  Solved: 905[Submit][Status] ...