Linux下一些Bash脚本的技巧
经常在linux下运行程序,有时不得不需要一些辅助的判定方法。比如,监控进程是否存活,定时发送数据其他数据源,等等等等。其实,如果能巧用bash,很多工作可以做的很轻松。不过bash对我而言,我其实还不算会用的,只是有些技巧本人觉得比较具有通用性,在这里记录一下。
经常用到的是监控某一个进程的状态。并根据状态决定是否杀死当前进程。
#!/bin/bash
function proc_check() {#检测某一个路径中启动的进程状态
ps -fe |grep /program/Test/ |grep nobody |awk '{print $2}' >> aasnow.txt
cat aasnow.txt | while read line;
do#判断当前进程的file IO是否超过指定额度,超过就杀死进程
lsof -p $line|wc -l >> assio.txt
cat assio.txt | while read IOCount;
do
echo $line - $IOCount
if [ $IOCount -ge 1000 ]
then
kill -9 $line
echo $(date)-PID=$line-IOCOUNT=$IOCount is close >> check_process.log
fi
done
rm -rf assio.txt
done
rm -rf aasnow.txt
}
#!/bin/sh
while true
do
proc_check#每隔3秒钟执行一次
sleep 3
done
以上的脚本是检测一个进程状态的sh,每隔3秒钟执行一次,用nohup把sh进程挂到后台去。这里没有用crontab,之所以没用是因为crontab似乎权限不允许我执行kill命令 造成脚本运行失效。所以用一个简单的办法,直接用root启动挂到后台去。
#!/bin/bash
#check process,job,send system data
rm -rf CreatePlayer.txt
DBIP=127.0.0.1
DBUser=dbjob
DBPass=dbjob
DBName=userDB
UserTime=' 00:00:00'
for NewDat in `date +"%Y-%m-%d"`
do
NewDat=$NewDat$UserTime
break
done
for YesDay in `date -d '-1 day' +"%Y-%m-%d"`
do
YesDay=$YesDay$UserTime
break
done
echo 'call proc_job_user_select('\'$YesDay\'','\'$NewDat\'')' > run.sql
#straaa='mysql -h'$DBIP' -u'$DBUser' -p'$DBPass' -D'$DBName' -e'$Proc
#echo $straaa
mysql -h$DBIP -u$DBUser -p$DBPass -D$DBName --execute="source /job/run.sql" > CreatePlayer.txt
echo 'Save proc_job_player_select() OK'
cat CreatePlayer.txt | mail -s "当日注册" liuyunxiang@9thq.com
这个是sh调用mysql执行某一个维护性的存储过程,并把数据结果发送给某一个邮箱。一般维护统计的时候,这个脚本比较有用,当然,你也可以不用mysql,统计日志亦然。 太强了,真是全才啊
页:
[1]