shell并发
2016-09-06 12:13
441 查看
1.并发->服务器端执行ip -a命令并返回结果
# cat ip_only
192.168.36.149
192.168.36.144
#!/bin/bash
Usage:return the server command 'ip a'
Author:chengyanli
Date:2016/08/18
thead_num=2 # 自定义并发数,根据自身服务器性能或应用调整大小,
开始千万别定义太大,避免管理机宕机
mkfifo $tmp_fifo_file #创建临时管道文件
exec 4<>$tmp_fifo_file #以读写方式打开管道文件,文件描述符为4,
取3-9任意文件描述符
rm -f $tmp_fifo_file #删除临时管道文件,也可以不删除
for ((i=0;i<$thead_num;i++)) #利用for循环向管道中输入并发数量的空行
do
echo " " #输出空行
done >&4 #输出重定向到定义的文件描述符4上
for ip in `cat /mnt/ip_only` #循环所有执行的服务器
do
read -u4 #从管道中读取行,每次一行,所有行读完后执行挂起,直到管道有空闲的行
{ #批量执行的命令放在大括号内
ssh ${ip} "ip a" #在服务器上执行ip a命令
sleep 3 #暂停3秒,给系统缓冲时间,达到限制并发进程数量
echo >&4 #再写入一个空行,使挂起的循环管继续执行
}& #放入后台执行
done
wait #等待所有进程执行完成
exec 4>&- #删除文件描述符
exit 0
2.并发->监控服务器磁盘使用情况,大于80%报警
# cat ip_only
192.168.36.151
192.168.36.144
# vim bingfa.sh
#!/bin/bash
Usage:if disk use>80%,give an alarm
Author:chengyanli
Date:2016/08/18
USER=742019722@qq.com
flag=0 #标志变量
thead_num=2
mkfifo testfifo
exec 4<>testfifo
rm -f testfifo
for ((i=0;i<$thead_num;i++))
do
echo >&4
done
for ip in `cat /mnt/ip_only`
do
read -u4
{
ssh root@${ip} "df -h|awk -F '%' '{print \$1}'|awk '{print \$1,\$5,"\n"}'|sed '1d'" > result #将服务器的磁盘使用情况返回至文件result
for i in `cat result|awk '{print $2}'` #提取磁盘的使用量
do
if [ ${i} -gt 80 ];then
j=`grep -w '$i' result|awk '{print $1}'` #提取磁盘的的名称
echo -e "Notice:${ip} "${j}" use>80%,plz do something:\n\n`df -h`\n\n`date +%Y-%m-%d`"|mail -s 'WARNING' $USER
flag=1; #若磁盘使用空间>80%,报警并将变质变量置为1
fi
done
sleep 3
echo >&4
}&
done
if [ $flag = 0 ];then #若标志变量为0,则所有磁盘ok
echo "all disk is ok!!!"
else
exit
fi
wait
exec 4>&-
exec 4<&-
# cat ip_only
192.168.36.149
192.168.36.144
#!/bin/bash
Usage:return the server command 'ip a'
Author:chengyanli
Date:2016/08/18
thead_num=2 # 自定义并发数,根据自身服务器性能或应用调整大小,
开始千万别定义太大,避免管理机宕机
mkfifo $tmp_fifo_file #创建临时管道文件
exec 4<>$tmp_fifo_file #以读写方式打开管道文件,文件描述符为4,
取3-9任意文件描述符
rm -f $tmp_fifo_file #删除临时管道文件,也可以不删除
for ((i=0;i<$thead_num;i++)) #利用for循环向管道中输入并发数量的空行
do
echo " " #输出空行
done >&4 #输出重定向到定义的文件描述符4上
for ip in `cat /mnt/ip_only` #循环所有执行的服务器
do
read -u4 #从管道中读取行,每次一行,所有行读完后执行挂起,直到管道有空闲的行
{ #批量执行的命令放在大括号内
ssh ${ip} "ip a" #在服务器上执行ip a命令
sleep 3 #暂停3秒,给系统缓冲时间,达到限制并发进程数量
echo >&4 #再写入一个空行,使挂起的循环管继续执行
}& #放入后台执行
done
wait #等待所有进程执行完成
exec 4>&- #删除文件描述符
exit 0
2.并发->监控服务器磁盘使用情况,大于80%报警
# cat ip_only
192.168.36.151
192.168.36.144
# vim bingfa.sh
#!/bin/bash
Usage:if disk use>80%,give an alarm
Author:chengyanli
Date:2016/08/18
USER=742019722@qq.com
flag=0 #标志变量
thead_num=2
mkfifo testfifo
exec 4<>testfifo
rm -f testfifo
for ((i=0;i<$thead_num;i++))
do
echo >&4
done
for ip in `cat /mnt/ip_only`
do
read -u4
{
ssh root@${ip} "df -h|awk -F '%' '{print \$1}'|awk '{print \$1,\$5,"\n"}'|sed '1d'" > result #将服务器的磁盘使用情况返回至文件result
for i in `cat result|awk '{print $2}'` #提取磁盘的使用量
do
if [ ${i} -gt 80 ];then
j=`grep -w '$i' result|awk '{print $1}'` #提取磁盘的的名称
echo -e "Notice:${ip} "${j}" use>80%,plz do something:\n\n`df -h`\n\n`date +%Y-%m-%d`"|mail -s 'WARNING' $USER
flag=1; #若磁盘使用空间>80%,报警并将变质变量置为1
fi
done
sleep 3
echo >&4
}&
done
if [ $flag = 0 ];then #若标志变量为0,则所有磁盘ok
echo "all disk is ok!!!"
else
exit
fi
wait
exec 4>&-
exec 4<&-
相关文章推荐
- android wifi 无线调试
- 运维入门
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- Linux Shell常用技巧
- Shell 脚本编程陷阱
- shell字符串操作详解
- Shell中删除某些文件外所有文件的3个方法
- Ruby中执行Linux shell命令的六种方法详解
- VB使用shell函数打开外部exe程序的实现方法
- Shell编程的一些知识集合
- Shell中的for和while循环详细总结
- 什么是Shell?Shell脚本基础知识详细介绍
- Shell脚本中引用、调用另一个脚本文件的2种方法
- Shell脚本解压rpm软件包
- Linux Shell 数组建立及使用技巧
- Shell脚本实现复制文件到多台服务器的代码分享
- Shell脚本实现批量替换文件内容
- Shell脚本实现的一个简易Web服务器例子分享
- linux Shell学习笔记第五天