开发脚本自动部署及监控
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. Gulp自动构建Web前端程序

    这两天在一个朋友在项目上碰到了一个这样的问题,在运营过程中,用户在浏览器上对某个表单进行数据提交时,需要引入新的平台接口数据的业务,通过评估,开发团队马上修改了相关后台代码和部分的前端脚本代码,通过简 ...

  2. 编写一个飞行棋项目(C#)遇到几个问题:

    在写程序中遇到如下问题:如果有人知道,请您一定要指点迷津.小白. 1.在运行暂停功能时,这个暂停功能可以实现,但是无法显示提示信息. case 3: Console.Clear(); Program. ...

  3. DES加密解密与AES加密解密

    随着开发时间的变长,当初认为比较难的东西,现在渐渐也就变的不那么难了!特别对于一些经常很少使用的类,时间长了之后渐渐就陌生了.所以在这里写一些日后可能会用到的加密与解密. 一.AES加密算法和DES加 ...

  4. C#计算表达式(仿计算器功能)

    一.用MSScriptControl在C#中执行JavaScript代码javascript中有个eval方法用过的人都知道他的方便和强大之处.在C#中,我们也可以通过Com组件来执行一段javasc ...

  5. 自学html5要花多长时间

    自学html5培训课程对于没有基础的那么就需要从头开始学,主要包括以下几方面 1. PC端网页制作基础,包括css,html 2. Javascript.jquery 主要是写一些动效 3. 学习UI ...

  6. TimerTask实现定期检查数据库操作

    最近在做一个P2P 的众筹网站,其他的内容还都可以,只是定期检查数库里面的项目是不是到期了,让我费了一些时间,现在写好了,我把它总结下来,以便以后使用.顺便和大家分享一下. Timer可以看成一个定时 ...

  7. MyBatis的类型自定义映射

    背景 利用MyBatis将数据库的时间类型映射成Java8的时间类型,引申对不同类型的自定义映射 实现方法 1.实现MyBatis中TypeHandler接口 @MappedTypes(value = ...

  8. Java面试04|Spring框架

    1.动态代理的几种方式 Java主要有两种代理,JDK和Cglib动态代理.先看JDK代理实例如下: JDK创建代理有一个限制,即它只能为接口创建代理实例.举个例子如下: public interfa ...

  9. WeMall微信商城源码插件代金券部分代码

    WeMall微信商城源码插件Coupon代金券代码是用于商业推广的比较有效的方式,分享了部分比较重要的代码,供技术员学习参考 AdminController.class.php <?php na ...

  10. KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架之koahub

    Installation $ npm install koahub Use with koa   var app = require('koa')();   var router = require( ...