总结:工作中用到的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旧,都会删除掉;




      脚本在整理中,后续会将其它脚本贴入,请大家多指点,多交流,多共享

你可能感兴趣的:(shell,脚本,常用shell脚本)