几个 简单的shell 脚本 借鉴一下
来源:互联网 发布:淘宝详情排版鉴赏 编辑:程序博客网 时间:2024/05/15 19:13
第一个 定时抓取服务器JVM相关信息
#! /bin/sh #get_current_timeexport JAVA_HOME=/opt/jdk1.6.0_10/export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH date=`date "+%Y-%m-%d-%H:%M:%S"` Root="/data/dxm/" jmapends=$Root$date"_jmap.txt"jstackends=$Root$date"_jstack.txt"jstateends=$Root$date"_jstate.txt" #start to register the jmap messageecho "start to register the jmap to "$jmapendsjmap -histo:live `jps|grep Resin |awk 'NR==1'|awk '{print $1}'` > $jmapends sleep 2 #start to register the jtack messageecho "start to register the jstack to "$jstackendsjstack -l `jps|grep Resin |awk 'NR==1'|awk '{print $1}'` > $jstackends sleep 2 #start to register the jstate messageecho "start to register the jstate message to "$jstateendsjstat -gcutil -t -h20 `jps|grep Resin |awk 'NR==1'|awk '{print $1}'` 1000 20 > $jstateends
这个可以跑个定时器:
crontab -e
*/10 * * * * sh /timer/timer.sh #每十分钟抓一次
第二个脚本:对上面的脚本改进一下,只有系统负载达到指定的值之后才打印JVM信息
- #! /bin/sh
- function printJVMMessage() {
- #get_current_time
- export JAVA_HOME=/opt/jdk1.6.0_10/
- export PATH=$JAVA_HOME/bin:$PATH
- export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
- #only the system load greate than 1*8PU then start to print the gc details
- date=`date "+%Y-%m-%d-%H:%M:%S"`
- Root="/data/dxm/"
- jmapends=$Root$date"_jmap.txt"
- jstackends=$Root$date"_jstack.txt"
- jstateends=$Root$date"_jstate.txt"
- #start to register the jmap message
- echo "start to register the jmap to "$jmapends
- jmap -histo:live `jps|grep Resin |awk 'NR==1'|awk'{print $1}'` > $jmapends
- sleep 2
- #start to register the jtack message
- echo "start to register the jstack to "$jstackends
- jstack -l `jps|grep Resin |awk 'NR==1'|awk'{print $1}'` > $jstackends
- sleep 2
- #start to register the jstate message
- echo "start to register the jstate message to "$jstateends
- jstat -gcutil -t -h20 `jps|grep Resin |awk 'NR==1'|awk'{print $1}'` 100020 > $jstateends
- }
- #System Max Load Per CPU,when the SystemLoad reached the MAX_LOAD * CPU_NUMBER then start register the jvm message
- MAX_LOAD=1
- CPU_NUMBER=`cat /proc/cpuinfo | grep processor |wc -l`
- <strong style="background-color: rgb(255, 255, 255);"><span style="color: rgb(255, 0, 0);">TOTAL_LOAD_TO_WARN</span></strong>=$(($MAX_LOAD*$CPU_NUMBER))
- #TOTAL_LOAD_TO_WARN=1
- CURRENT_SYSTEM_LOAD=`uptime | awk '{print $(NF-2)}' | sed's/,//'`
- Start_Time=`date "+%Y-%m-%d-%H:%M:%S"`
- echo 'start to print the jvm message...currenttime is:'$Start_Time
- echo 'current system load is'$CURRENT_SYSTEM_LOAD' and TOTAO_LOAD_TO_WARN is '$TOTAL_LOAD_TO_WARN
- if [ $(echo "$CURRENT_SYSTEM_LOAD > $TOTAL_LOAD_TO_WARN"|bc) ==1 ]; then
- echo 'printint the jvm message...'
- printJVMMessage
- fi
- Finish_Time=`date "+%Y-%m-%d-%H:%M:%S"`
- echo 'finish to print the jvm message...and current time is:'$Finish_Time
第三个脚本:比较两个版本中jar包是否相同(有改变):
#! /bin/sh #compare the lib files's md5 int file1 with those in file2#if it only exist in file1 or one lib file's md5 is not equal i#with the other then print it to the log.txt LibPath1=$1LibPath2=$2date=`date "+%Y-%m-%d-%H:%M:%S"` LOG=$date"_log.txt"echo "-----------log file " $LOG echo LibPath1: $LibPath1echo LibPath2: $LibPath2echo LibPath1: $LibPath1 \n >> $LOGecho LibPath2: $LibPath2 \n >> $LOGecho >> $LOGecho >> $LOG for File in `ls -f $LibPath1|grep jar `;do MD5=`md5sum $1$File |awk 'NR==1'|awk '{print $1}'` File2=$LibPath2$File #echo "File2-----------------" $File2 #if the same lib file exist if [ ! -f "$File2" ]; then echo $File only exist LibPath1 echo $File only exist LibPath1 \n >> $LOG echo >> $LOG #if the same file exist in directory2 else MD52=`md5sum $File2 |awk 'NR==1'|awk '{print $1}'` if [ "$MD5" != "$MD52" ]; then echo the $File changed \n >> $LOG echo >> $LOG echo the $File changed fi fi done
上的那个文件为
md5compare.sh
运行是可以用以下命令运行:
./md5compare.sh libpath1 libpath2
注意libpath1,libpath2 必须以"/" 结尾比如:
/opt/ROOT_2011-09-08-09:57:26/WEB-INF/lib/
而不是
/opt/ROOT_2011-09-08-09:57:26/WEB-INF/lib]]]
- 几个 简单的shell 脚本 借鉴一下
- 几个简单的shell脚本
- shell初学---几个简单的shell脚本
- 简单的几个shell脚本一
- 简单的几个shell脚本二
- 简单的几个shell脚本三
- 简单的几个shell脚本四
- 简单的几个shell脚本五
- 简单的几个shell脚本六
- 简单的几个shell脚本七
- 简单的几个shell脚本八
- 几个常用的shell脚本
- 几个不错的Shell脚本
- 几个不错的Shell脚本
- shell脚本的几个实例
- 几个常用的shell脚本
- linux 几个简单shell脚本demo
- 简单的shell脚本
- PDO::__construct(): [2002] No such file or directory (trying to connect via unix
- Android Layout XML属性
- 排序算法
- 正则表达式学习心得
- 使用JDBC进行批处理
- 几个 简单的shell 脚本 借鉴一下
- sql存储过程——多结果集返回与java获取
- Android 学习笔记(3) -- 应用程序资源
- cocos2d-x 模仿计时器效果,动态增加分数
- 我的生活
- Php防止重复提交问题总结
- PHP中try{}catch{}
- win32 获取IP段分配情况 (DNS p2p 应用可能都会用到)
- 一些有用处的工具-开源,谷歌