kill占用指定端口进程(定时自动重启weblogic脚本)

案例:
1、通过ps-ef |grep命令找到想要杀死的进程信息,然后配合awk和sed组织好要杀死的进程清单对应的shell语句,并通过sh命令自动执行kill:

  ps -ef |grep /home/apache-tomcat-7.0.76/|awk 'NR>1 {print $2}' | sed -e "s/^/kill -9 /g" | sh -

2、停止weblogic时杀进程可以使用下面命令:

lsof -i:9001|awk 'NR>=2{print "kill -9 "$2}'|sh

根据上面两个案例,可以编写一个定期自动重启weblogic脚本案例,比如每周六重启一次:

#!/bin/bash
domain="/home/bea/weblogic/user_projects/domains/base_domain"
relist_log=$domain/relist.log
logdate=`date +%Y%m%d`
bak_nohup_log=$domain/nohup_bk/nohup_${logdate}.out
echo "========================== $logdate 日weblogic重启日志 ==========================" >> $relist_log
cd $domain
#先找到进程并杀掉
lsof -i:9001|awk 'NR>=2{print "kill -9 "$2}'|sh
#睡眠3秒
sleep 3
#然后统计现在占用9001端口的进程数
cnt=`lsof -i:9001|wc -l`
#如果cnt大于0,说明还有进程在占用,这时候不做任何操作,退出。如果等于零,再去启动进程
if [ $cnt -gt 0 ];then
echo "进程未杀成功,请检查,当前遗留进程如下:" >>$relist_log
echo `lsof -i:9001` >>$relist_log
else
echo "进程成功杀死,接下来启动进程"  >>$relist_log
#备份日志文件
mv nohup.out $bak_nohup_log
#启动进程,并将nohup信息输出至relist_log,进程启动信息还在nohup.out
echo `nohup ./startWebLogic.sh >> /home/bea/weblogic/user_projects/domains/base_domain/nohup.out 2>&1 &` >>  $relist_log
sleep 30
cnt2=`lsof -i:9001|wc -l`
if [ $cnt2 -gt 0 ];then
echo "重启成功,占用端口进程数如下:" >>  $relist_log
echo `lsof -i:9001|wc -l` -1 >>  $relist_log
else
sleep 60
cnt3=`lsof -i:9001|wc -l`
if [ $cnt3 -gt 0 ];then
echo "重启成功,占用端口进程数如下:" >>  $relist_log
echo `lsof -i:9001|wc -l` >>  $relist_log
else
echo "端口重启失败" >>  $relist_log
fi
fi
fi

然后加入crontab定每周天凌晨1点定时重启
0 1 * * 0 /root/reboot.sh

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