Weblogic服务器偶尔会挂掉,为了使weblogic能够在挂掉后第一时间能够重启,基于此背景下实现了Weblogic进程监控及自动重启脚本。
第一部分,Weblogic自动重启脚本如下:
#!/bin/sh
port1=8002
ipaddr1=192.168.1.4
currentDate=`date '+%Y-%m-%d %H:%M:%S'`
ps -aux | grep weblogic
sleep 3
port1Info1=`netstat -an|awk '{print $1, $4}' |sort -u| grep '[^0-9]'$port1'$' | grep ''$ipaddr1'' |wc -l`
if [ "$port1Info1" -eq "0" ];
then
echo 'start'$port1' service.'
nohup sh /data/weblogic/Oracle/Middleware/user_projects/domains/base_domain/restart_server1.sh
fi
exit 0
遇到的问题:当监控到weblogic进程不存在时,采用绝对路径启动失败;但手动执行监控脚本可正常判断当服务宕机时重启服务,部署到定时任务则无法启动,上述脚本的中的部分代码,如果部署到定时任务则无法自动重启:
nohup sh /data/weblogic/Oracle/Middleware/user_projects/domains/base_domain/restart_server1.sh
解决方法:必须切换到脚本所在的目录执行启动脚本,否则加入到系统定时任务中无法正常自动启动服务,如以下代码:
cd /data/weblogic/Oracle/Middleware/user_projects/domains/base_domain nohup ./restart_server1.sh&
第二部分,实现了Weblogic监控及调用重启脚本如下:
#!/usr/bin/perl
@array_port = (
8891,
8892,
8893
);
$ipaddr1 = "10.3.40.214";
#$IPADDR=`ifconfig | grep 'inet addr' |sed 2,10d | cut -d: -f2| cut -d' ' -f1`;
#chop $IPADDR;
foreach $port (@array_port[0..$#array_port]){
my $port1Info = `netstat -an|awk '{print \$1, \$4}' |sort -u| grep '[^0-9]$port\$' | grep '$ipaddr1' |wc -l`;
chop $port1Info;
print "$port -- $port1Info\n";
if ($port1Info == "0"){
print "start $port service.\n";
$stat = `sh /data/monWeblogic.sh`;
print "excute weblogic start script, start status: $stat\n";
}
}
exit;