使用jenkins实现监控嵌入式设备稳定性之二----脚本部分
生活随笔
收集整理的這篇文章主要介紹了
使用jenkins实现监控嵌入式设备稳定性之二----脚本部分
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、Readme:
1、下面的腳本,是jenkins通過ftp上傳到每臺pbx的 /root/stability路徑下,pbx執(zhí)行需要用的腳本 2、 para.txt ,是在jenkins構(gòu)建時,jenkins在PBX上下發(fā)命令生成的,生成路徑也在 ??/root/stability ;無需特地準(zhǔn)備 para.txt 3、如果想在csv中多記錄數(shù)據(jù),那么在stabilitycsv.sh腳本中自定義添加你要記錄的txt文件,然后在記錄csv的腳本中自定義添加你要增加的記錄內(nèi)容即可 4、如下腳本中有些小細節(jié)跟注意事項,搜索關(guān)鍵詞 “小細節(jié)” “注意事項” 二、具體腳本及一些細節(jié)、注意事項 df.sh df腳本,root/dev ?在$devroot下正常- awk獲取指定行制定列數(shù)據(jù):awk 'NR==2{print}'| awk '{print $5}':第2行第5列
? top.sh top腳本,asterisk虛擬內(nèi)存在minvsz-maxvsz之間正常
- Linux 中shell 腳本if判斷多個條件:https://blog.csdn.net/weixin_37569048/article/details/80039941
? memory.sh 檢查內(nèi)存是否泄漏,是否有下降趨勢:連續(xù)5次free下降cach上升,判斷為異常;單次超過極限,也判斷為異常? 在首次運行時,創(chuàng)建memory.txt,并把memory.txt分別cp到memory1.txt-memory5.txt 在第二次及之后運行時,最新的寫到memory.txt,之前的memory.txt->memory1.txt,memory1.txt->memory2.txt 以此類推 先判斷當(dāng)前free、cach值是否超過給定的極限,符合給定極限后再判斷free跟前5次比是否連續(xù)下降,cach是否連續(xù)上升 #!/bin/sh #set -xv free_min=`cat para.txt | grep 'free_min'|awk -F ":" '{print$2}'` #內(nèi)存的下限 cach_max=`cat para.txt | grep 'cach_max'|awk -F ":" '{print$2}'` #cached的上限#free_min=47084 #cach_max=324000if [ ! -f "memory.txt" ] #判斷memory.txt是否存在---第一次運行該腳本不存在,若不存在則執(zhí)行then部分 then cat /proc/meminfo > memory.txt cp memory.txt memory1.txt cp memory.txt memory2.txtcp memory.txt memory3.txtcp memory.txt memory4.txtcp memory.txt memory5.txtelse break; fi a=0 b=0memfree=`cat memory.txt | awk 'NR==2{print}' | awk '{print$2}'` cached=`cat memory.txt | awk 'NR==4{print}' | awk '{print$2}'` if [[ $memfree -ge $free_min ]] && [[ $cached -lt $cach_max ]] #判斷當(dāng)前的free跟cach是否超過限制范圍,若沒超過則執(zhí)行then部分進一步判斷 then mv memory4.txt memory5.txtmv memory3.txt memory4.txt mv memory2.txt memory3.txtmv memory1.txt memory2.txtmv memory.txt memory1.txtcat /proc/meminfo > memory.txtfor i in $(seq 1 5) #當(dāng)前的free跟cach與memory1.txt到memory5.txt對比 do memfreelast=`cat memory$i.txt | awk 'NR==2{print}' | awk '{print$2}'`#echo $memfreelast cachedlast=`cat memory$i.txt | awk 'NR==4{print}' | awk '{print$2}'`#echo $cachedlastif [ $memfree -ge $memfreelast ]then if [ $cached -le $cachedlast ]then echo `date`" : memory and cached OK"breakelse b=$(($b+1))fielse a=$(($a+1))fi i=$((i+1))doneif [ $a -eq 5 ];thenecho `date`" : memfree continue leak:false"fiif [ $b -eq 5 ];thenecho `date`" : cached continue leak:false"fielse echo `date`"memory overflow,please chech memfree and cached : false "fi
stabilitycsv.sh 1、需要對shell執(zhí)行完輸出的txt文件做些改造: a、在寫CSV文件時,是用逗號作為換單元格, b、如果要讓一個單元格內(nèi)的內(nèi)容換行的話,需要將這個單元格的內(nèi)容都用雙引號括起來,如 "aabb",然后在需要換行的位置寫入換行的轉(zhuǎn)義字符;shell輸出的txt的換行符是 \n,excel支持的換行符是 \r\n #!/bin/sh#top.txt sed -n '1,20p' top.txt > topsed1.txt #把top.txt的前1-20行另存為 topsed1.txt(太多行會破壞格式,所以保留的20行) sed 's/,/;/g ' topsed1.txt > topsed2.txt #把topsed1.txt中的 “,”都換成“;”另存到 topsed2.txt中 (因為csv是把“,”當(dāng)成換單元格,所以把內(nèi)容中的“,”替換掉以保持格式便于查看) sleep 1 sed '1i"' topsed2.txt > topsed3.txt #在topsed2.txt的第一行插入符號" sleep 1 sed '$a"' topsed3.txt > topsed4.txt #在topsed3.txt的最后一行插入符號 " sed 'H;$!d;${x;s/^\n//;s/\n/\r\n/g}' topsed4.txt > top_final.txt # 在topsed4.txt 把換行符由原來的“\n”改成“\r\n”(excel的換行符是\r\n,這樣在window打開可以保持top.txt輸出的換行效果)#如果有其他txt內(nèi)容需要改造,按照top.txt這個模式copy改造即可,如下#df.txt sed 's/,/;/g ' df.txt > dfsed1.txt sleep 1 sed '1i"' dfsed1.txt > dfsed2.txt sleep 1 sed '$a"' dfsed2.txt > dfsed3.txt sed 'H;$!d;${x;s/^\n//;s/\n/\r\n/g}' dfsed3.txt > df_final.txt#cpu.txt sed 's/,/;/g ' cpu.txt > cpu1.txt sleep 1 sed '1i"' cpu1.txt > cpu2.txt sleep 1 sed '$a"' cpu2.txt > cpu3.txt sed 'H;$!d;${x;s/^\n//;s/\n/\r\n/g}' cpu3.txt > cpu_final.txt#memory.txt sed 's/,/;/g ' memory.txt > memory1.txt sleep 1 sed '1i"' memory1.txt > memory2.txt sleep 1 sed '$a"' memory2.txt > memory3.txt sed 'H;$!d;${x;s/^\n//;s/\n/\r\n/g}' memory3.txt > memory_final.txtecho "`date`"",""`cat df_final.txt`"",""`cat top_final.txt`"",""`cat calls_final.txt`"",""`cat memory_final.txt`">> stabilitycsv$PBX_IP.csv #如果要新加入單元格內(nèi)容,在此添加,記得","換單元格
?
ftp_get.sh 執(zhí)行命令格式 ./ftpget.sh PBX_IP password ? (password參數(shù)不填表示密碼為空) ./ftpget.sh 192.168.101.155 1 ? :ip為192.168.101.155,密碼為1 ./ftpget.sh 192.168.101.155 ? ? ?:ip為192.168.101.155,密碼為空 用戶名代碼固定為ls@yf 注意點: 1、該腳本用的是expect ,所以首行是 #!/usr/bin/expect ?;而不是 #!/bin/sh 2、要用 ./ftpget.sh的 格式運行,所以這個腳本要賦予執(zhí)行權(quán)限 755 3、expect用是的tcl語法,注釋跟shell不一樣,需 在#前加?; #!/usr/bin/expect set PBX_IP [lindex $argv 0] ;#取自命名后帶的第一個參數(shù)值,設(shè)置為連接的ip,參數(shù)值之間以空格隔開; [lindex $argv 0]表示執(zhí)行命令行帶的第一個參數(shù)值 set password [lindex $argv 1] ;#取自命令后待的第二個參數(shù)值,設(shè)置為連接的密碼;無該參數(shù)值表示密碼為空 spawn ftp $PBX_IPexpect "Name" send "root\r"expect "Password:" send "$password\r"expect "ftp>" send "bin\r"expect "ftp>" send "get df.txt\r"expect "ftp>" send "get cpu.txt\r"expect "ftp>" send "bye\r"?
轉(zhuǎn)載于:https://www.cnblogs.com/cixiafeibixia/p/10712660.html
總結(jié)
以上是生活随笔為你收集整理的使用jenkins实现监控嵌入式设备稳定性之二----脚本部分的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: day12装饰器进阶
- 下一篇: mysql学习--基本使用