shell并发
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell并发相关的知识,希望对你有一定的参考价值。
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=[email protected]
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 [email protected]${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<&-
本文出自 “真水无香” 博客,请务必保留此出处http://chengyanli.blog.51cto.com/11399167/1846778
以上是关于shell并发的主要内容,如果未能解决你的问题,请参考以下文章