用gearman总是难免遇到client提交量大增或者worker或者网络出问题导致jobs大量积压。
作为一个懒人,总是要惦记着这事是绝不能接受的。
所以万能的shell啊,请赐予我力量吧~!
[root@a1-13-a-bce3-1 czt]# cat autoReduceJobs.sh
#!/bin/bash
host="10.10.99.31"
port=4730
reduce()
{
#获取任务存量大于300k的方法名,nc需要取1秒的延迟,否则会没有输出。
funcs=`printf "status\n" | nc -i 1 $host $port | awk '{if($2>300000){print $1}}'`
for f in $funcs
do
#写log是个好习惯^-^
echo "["`date +'%Y-%m-%d %H:%M:%S'`"] call gearman as fake "$f" worker to remove 20000 jobs."
#调用gearman,领取每一个任务量过大的方法名的20k个任务
gearman -h $host -p $port -f $f -c 20000 -w >/dev/null
done
}
#每30秒一次
while [ true ]
do
reduce
sleep 30
done
[root@a1-13-a-bce3-1 czt]# nohup ./autoReduceJobs.sh >> reduce.log 2>&1 & #后台执行,注意防掉线
0 条评论。