找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4718|回复: 1

Linux下一些Bash脚本的技巧

[复制链接]
发表于 2011-11-28 13:29:40 | 显示全部楼层 |阅读模式
经常在linux下运行程序,有时不得不需要一些辅助的判定方法。比如,监控进程是否存活,定时发送数据其他数据源,等等等等。
其实,如果能巧用bash,很多工作可以做的很轻松。不过bash对我而言,我其实还不算会用的,只是有些技巧本人觉得比较具有通用性,在这里记录一下。
经常用到的是监控某一个进程的状态。并根据状态决定是否杀死当前进程。
  1. #!/bin/bash
  2. function proc_check() {#检测某一个路径中启动的进程状态
  3. ps -fe |grep /program/Test/ |grep nobody |awk '{print $2}' >> aasnow.txt
  4. cat aasnow.txt | while read line;
  5. do#判断当前进程的file IO是否超过指定额度,超过就杀死进程
  6.         lsof -p $line|wc -l >> assio.txt
  7.         cat assio.txt | while read IOCount;
  8.         do
  9.                   echo $line - $IOCount
  10.                   if [ $IOCount -ge 1000 ]
  11.                   then
  12.                           kill -9 $line
  13.                           echo $(date)-PID=$line-IOCOUNT=$IOCount is close >> check_process.log
  14.                   fi
  15.         done
  16.   rm -rf assio.txt
  17. done
  18. rm -rf aasnow.txt
  19. }
  20. #!/bin/sh
  21. while true
  22. do
  23.   proc_check#每隔3秒钟执行一次
  24.   sleep 3
  25. done
复制代码

以上的脚本是检测一个进程状态的sh,每隔3秒钟执行一次,用nohup把sh进程挂到后台去。这里没有用crontab,之所以没用是因为crontab似乎权限不允许我执行kill命令 造成脚本运行失效。所以用一个简单的办法,直接用root启动挂到后台去。
  1. #!/bin/bash
  2. #check process,job,send system data
  3. rm -rf CreatePlayer.txt
  4. DBIP=127.0.0.1
  5. DBUser=dbjob
  6. DBPass=dbjob
  7. DBName=userDB
  8. UserTime=' 00:00:00'
  9. for NewDat in `date +"%Y-%m-%d"`
  10. do
  11.         NewDat=$NewDat$UserTime
  12.         break
  13. done
  14. for YesDay in `date -d '-1 day' +"%Y-%m-%d"`
  15. do
  16.         YesDay=$YesDay$UserTime
  17.         break
  18. done
  19. echo 'call proc_job_user_select('\'$YesDay\'','\'$NewDat\'')' > run.sql
  20. #straaa='mysql -h'$DBIP' -u'$DBUser' -p'$DBPass' -D'$DBName' -e'$Proc
  21. #echo $straaa
  22. mysql -h$DBIP -u$DBUser -p$DBPass -D$DBName --execute="source /job/run.sql" > CreatePlayer.txt
  23. echo 'Save proc_job_player_select() OK'
  24. cat CreatePlayer.txt | mail -s "当日注册" liuyunxiang@9thq.com
复制代码
这个是sh调用mysql执行某一个维护性的存储过程,并把数据结果发送给某一个邮箱。一般维护统计的时候,这个脚本比较有用,当然,你也可以不用mysql,统计日志亦然。
发表于 2011-12-16 15:24:53 | 显示全部楼层
太强了,真是全才啊
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-5-2 22:11 , Processed in 0.029559 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表