總結:工做中用到的SHELL腳本、shell語句

這篇文章主要是將本身在工做中用到的腳本整理出來,也是拋磚引玉,旨在但願能夠幫助一些有需求的朋友,有的寫很差,但願你們指點一二,以求作的更好:
1.重啓服務程序
cat restart_jboss.sh 
#!/bin/bash
source ~/.bash_profile
check_pid=`ps -ef | grep jboss | grep org.jboss.logmanager|grep jboss-7.0.2GA | awk '{ print $2}'`
echo "check_pid: $check_pid"
kill $check_pid
sleep 4
if [ ! -z $check_pid ]
then
        kill -9 $check_pid
        sleep 2
fi
cd /usr/local/jboss-7.0.2GA/bin
nohup ./standalone.sh   >> nohup.out 2>&1 &
其中jboss是服務名,其它服務重啓腳本能夠參考;
2. 日誌切割
對於一些訪問日誌,須要天天分開記錄,就簡單的用腳原本定義一下:
cat cut_nginx_logs.sh 
#!/bin/bash
####cut nginx's log
mv /usr/local/nginx/logs/access.log  /usr/local/nginx/logs/access.`date "+%m-%d"`.log
kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
定義日誌名爲:access.月-日的格式,其它腳本切割能夠參考
3. rsync 資源同步腳本:
由於在同步資源的時候,不是整個目錄一塊兒copy,是父目錄下的一些子目錄,這樣的話,若是一個個子目錄進行同步的話,會比較麻煩:
cat rsync_xbtx.sh 
#!/bin/bash
rsync  -avz  \
        --include=*.jar  \
        --include=conf \
        --include=conf/xbtx/ \
        --include=conf/xbtx/xls \
        --exclude=conf/xbtx/* \
        --exclude=conf/* \
        --include=Res \
        --include=Res/* \
        --exclude=/* \      
root@server ip:/usr/local/applications/zyx/xbtx/  /usr/local/xbtx/
這個腳本就是實現本地去同步serverip  /usr/local/applications/zyx/xbtx/下的 資源
4. jboss 程序,有時候會由於網絡訪問、程序異常等,致使沒法訪問數據庫,而你又不能時時刻刻去監控它,不能及時獲悉到error,綜合考慮,就去從日誌中去查找有沒有error的存在,有的話去調用jboss程序的重啓腳本
cat read.sh 
#!/bin/bash
##This's script  to check jboss error,about oracle connect;
cd /home/jboss/jboss-4.2.2.GA/bin
tail nohup.out -c 500k | grep "java.sql.SQLException: An attempt by a client to checkout a Connection has timed out" > read.txt
if grep -q "java.sql.SQLException" read.txt ; then
cd /home/dustin
./restart_jboss.sh
else 
echo "not found this error"
fi 
exit 0
能夠將腳本放在crond任務計劃中,每10分鐘檢查更新一次
5.備份,針對重要服務的備份不可缺乏,當在執行誤操做事後、或者服務器異常時,備份文件的恢復會給你帶來極大的便利
#!/bin/bash
source ~/.bash_profile
#按照server ip來命名num的
Num=46
date=`date +"%Y_%m_%d"`
##放置備份文件所須要的目錄
cd /home/frank
if [ ! -d server$Num ]
then
mkdir server$Num;
fi

ServerBackup=/home/frank/server$Num
if [ ! -d scripts ]
then
        mkdir -p $ServerBackup/jboss-7.0GA
fi

#backup jboss-7.0GA,使用rsync命令
rsync  -av /usr/local/jboss-7.0.2GA/standalone/deployments/*.war  $ServerBackup/jboss-7.0GA/

rsync  -av /usr/local/jboss-7.0.2GA/standalone/configuration       $ServerBackup/jboss-7.0GA/

rsync  -av /usr/local/jboss-7.0.2GA/standalone/lib                 $ServerBackup/jboss-7.0GA/

rsync  -av /usr/local/jboss-7.0.2GA/bin/conf                        $ServerBackup/jboss-7.0GA/
#更改屬主、屬組
chown -R frank:root /home/frank
#打包
tar -cvf  server$Num.$date.tar.gz  server$Num
echo
6.有的時候須要從日誌裏去查找http訪問最多的服務名
思路:
去查找訪問最多的服務名,先看一下nginx 輸出的日誌
221.179.8.24 - - [30/May/2012:15:33:55 +0800] "GET /comum/request?pver=1&ac=checkphone&username=fkk148&data=13112&imsi=460027092382555&plat=14&kver=46&sc=8&prj=7635&smsc=13800290500&mnc=0&mcc=460&lang=1&appid=888lt=1 HTTP/1.1" 200 2 "-" "-"
能夠看出,服務名爲:/comum,以後用cut命令,以「/」爲分割,將comum分割出來
cat 03-23.log  | awk '{ print $7 }' | cut -d / -f 2 | sort | uniq -c | sort -n | head -n 1
sort是排序,sort -n是升序,sort -nr是降序,uniq是去掉重複的值
7.使用find命令去刪除日誌文件
當一個程序產生的log文件比較多時,但又不能所有刪除完,這是能夠藉助find命令去查找出日誌,結合xargs將日誌刪除,節約時間,也不用一個個刪除
find ./ -type f ! -newer server.log.11 | grep server.log | xargs rm -rf {};
./表明當前目錄,要記得使用grep,否則會將一些其它文件給刪除掉的,server.log.11是一個間隔點,只要比server.log.11舊,都會刪除掉;




      腳本在整理中,後續會將其它腳本貼入,請你們多指點,多交流,多共享
相關文章
相關標籤/搜索