首页 > 代码库 > shell并发

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=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<&-


本文出自 “真水无香” 博客,请务必保留此出处http://chengyanli.blog.51cto.com/11399167/1846778

shell并发