点击(此处)折叠或打开
- #!/bin/bash
- # script:world.sh
- # 用来封装自定义的脚本
- # 本原始代码只是提供了一个简单的演示,所有自定义的脚本都可以写入最内层的代码块中
- # 来源: Lover的工具小屋
- # author: Lover
- # thinker()
- # 将附加在脚本末尾的 域名:IP 抽取出来,用于判断
- function thinker(){
- vars=`cat $0 | sed -n '/# BEGINVAR$/,/# ENDVAR$/p' | grep -v -E '# BEGINVAR|# ENDVAR' | sed -n 's/^# //gp'`
- echo $vars
- }
- # getip()
- # 获取本机电信ip
- function getip(){
- # -w 精确匹配一个word
- telip=`ifconfig eth0 | grep -w inet | awk -F: '{print $2}' | awk '{print $1}'`
- echo $telip
- }
- #
- # 根据判断本机ip在数组中出现的次数,得到本机有几个服或者需要迭代处理几次
- # 最少一次,特例也就是一个服一台机器的情况,设计的原则就是多个服一个ip的通用处理模式
- # 一个服一个ip只是我设计的集合的一个子集,也是最简单的情况
- #
- telip=`getip`
- domainip=(`thinker`)
- # cc: control center
- # 进入到 $cc 目录中
- cc='/root/ygfs_cc'
- [ -e $cc ] || mkdir $cc
- cd $cc
- for((i=0;i<${#domainip[@]};i++))
- do
- #在同一批次需要处理的域名ip中查找自己出现几次,以判断本ip上需要执行几次功能脚本,通常执行一次就是处理一个服
- echo ${domainip[$i]} | grep -q $telip &&
- {
- #进入本ip本服的管理目录
- [ -e $cc/${domainip[$i]} ] || mkdir $cc/${domainip[$i]}
- cd $cc/${domainip[$i]}
- # 这里就是核心功能块
- # 从下面开始是我们可以手动加入自己功能的部分,至少保证在最后的阶段状态日志前加入,否则系统无法判断
- # 具体分为几个阶段按照实际需要划分,最后一条echo语句为必须,位置必须处于整个代码块的最后面,也就是说至少分为一个阶段
- # 该代码块用来存放功能代码,请保证所有自定义的的代码都在该块内 { ... },当然不是强制性的,你可以将自己的功能写成一个子块或者一个兄弟块
- {
- # Demo
- >$cc/${domainip[$i]}_stage.log
- # stageinfo,都以 *_stage.log 模式,便于管理中心的代理程序来获取状态
- # 记录的格式都是json格式,主要是为了减少服务器端对数据再一次处理,将数据解析的事情交给浏览器
- echo "'${domainip[$i]}':'`basename $0` at `date +%H:%M:%S` task(1/3) 开始执行'" > $cc/${domainip[$i]}_stage.log
- ls -hl /etc
- sleep 3
-
- # stageinfo
- echo "'${domainip[$i]}':'`basename $0` at `date +%H:%M:%S` task(2/3) 列出etc目录完毕'" > $cc/${domainip[$i]}_stage.log
- date
- sleep 3
-
- # 最后这个stageinfo必须保留
- echo "'${domainip[$i]}':'`basename $0` at `date +%H:%M:%S` task(3/3) is completed'" > $cc/${domainip[$i]}_stage.log
- }
- }
- done