为了管理上的方便和要求,由某一用户(组)管理weblogic及其衍生的应用。本文以weblogic用户为例,之后的安装及配置管理都在weblogic用户下进行。
强烈建议使用oracle jrockit最新版本,可从oracle官网下载。安装过程参见相关的安装手册。
安装过程参见相关的安装手册。
由于weblogic域相当于一个独立的应用服务器(使用独立的JAVA进程),建议应用系统的各子系统独立部署于不同的域,使其降低耦合,减少相互影响程度。已广发东莞社保金融卡系统为例,该系统包括管理系统、交换系统和社保FTP服务三个子系统,可分别创建三个weblogic域,分别部署子系统,在某个子系统出现异常时,不会造成其它子系统的停机,每个域服务的关闭和启动都互不影响,异常发生时,保证业务不会完全中断(实际经验是主要是管理系统发生异常)。
假设weblogic安装目录是/home/weblogic/Oracle/Middleware11g。
1、在<weblogic安装目录>/wlserver_10.3/common/bin下,执行./config.sh
2、选择“创建新的weblogic域”,下一步
3、选择“生成一个自动配置…”,下一步
4、修改域名,域名最好使用与应用相近有明显意义的名称,如mis(管理系统)、exchgsvr(交换系统)、siftp(社保ftp服务)等,如下为管理系统域:
5、输入域名后,下一步
6、输入管理员名称和口令,下一步
7、选择“生产模式”(启动时可免除输入用户名和口令,本文有介绍),根据实际选择JDK,下一步
8、此处不作任何选择,下一步
9、此处不作任何修改,点击创建
10、完成,该域默认端口号为7001。
创建域后,必须进行一次首次启动完成该域服务器的相关配置,此时需要输入用户名和密码。
在<weblogic安装目录>/user_projects/domains/mis下(mis是上述创建的域名),执行./startWeblogic.sh,如下:
输入管理员名称和密码后,继续启动完成。mis目录下将自动创建servers目录,将来应用的部署和运行将在该目录下。
打开<weblogic安装目录>/user_projects/domains/mis/config/config.xml,在server节点处增加listen-port内容,如下红字部分
<server> <name>AdminServer</name> <listen-port>your port</listen-port> <listen-address/> </server>
**注意:listen-port节点必须写在listen-address之前。
重启域服务器生效。
侦听端口号也可在控制台修改。
Weblogic安装时默认设置JDK堆内存最大为512M,可根据服务器物理内存适当调整,推荐值剩余内存的50%,最大值3G,Xms和Xmx设成一样。
打开<weblogic安装目录>/user_projects/domains/mis/bin/setDomainEnv.sh,
修改JDK堆内存,如:
if [ "${JAVA_VENDOR}" = "Sun" ] ; then WLS_MEM_ARGS_64BIT="-Xms256m -Xmx512m" /*此处改为实际值*/ export WLS_MEM_ARGS_64BIT WLS_MEM_ARGS_32BIT="-Xms256m -Xmx512m" /*此处改为实际值*/ export WLS_MEM_ARGS_32BIT else WLS_MEM_ARGS_64BIT="-Xms512m -Xmx512m" /*此处改为实际值*/ export WLS_MEM_ARGS_64BIT WLS_MEM_ARGS_32BIT="-Xms512m -Xmx512m" /*此处改为实际值*/ export WLS_MEM_ARGS_32BIT fi
域服务器重启后生效。
生产模式下的域服务器启动时需要输入用户名和密码,很不方便,可通过以下方法免除该麻烦。
在/home/weblogic/Oracle/Middleware11g/user_projects/domains/mis/servers/AdminServer下,创建目录security,在security下,创建文件boot.properties,记录域管理员用户名和密码,内容如下:
username=weblogic
password=weblogic123
域服务器启动时将自动从该文件中获取用户和密码,免除手工输入,在首次使用时,weblogic将会加密处理,以后该文件中的usename和password值都是密文。
Weblogic创建域后在其域目录的bin下自动生成关闭脚本(stopWeblogic.sh),但是该关闭脚本基本上不能关闭域服务,因此需要手工通过kill方式杀死java进程,但是有多个域服务器同时在线的话,很难分清哪个java进程是哪个域用的,可以通过查找指定侦听端口号的进程知道该域所使用的java进程。以下文件shutdown.sh可以实现完整关闭指定端口的weblogic的功能。shutdown.sh内容如下:
port=$1 var=$(netstat -anp|grep 127.0.0.1:$port |awk '{print $7}') echo $var if [ "${var}" != "" ] ; then ##get spid java_pid=${var%/*} echo $java_pid echo "SHUTDOWN WEBLOGIC SERVER AT PORT $port ." kill -9 $java_pid sleep 2 else echo "WEBLOGIC SERVER AT PORT $port IS NOT EXISTS." fi echo "----Done----"
用weblogic用户把shutdown.sh上传到服务器,如/home/weblogic下;
赋予执行权限:chmod 755 shutdown.sh
使用方法,如关闭7001端口的weblogic,执行./shutdown.sh 7001。
参见《Weblogic迁移手册》的其它配置修改,如hibernate包冲突问题。
1、setsid ./startWeblogic.sh &
2、 (./startWeblogic.sh &)
3、nohup ./startWebLogic.sh >AdminServer.log 2>&1 & (后台启动,并把控制台信息输出到指定指定文件AdminServer.log)
1、登录控制台:登录地址:http://<ip>:port/console,如下图:
2、输入管理员用户名和密码,进入控制台。
1、在控制台左边的“域结构”列表中点击“安全领域”,右边如下图:
2、点击“myrealm”,出现下图:
3、点击“用户和组”选项卡,出现下图:
4、点击用户名称为“weblogic”(该用户是在创建域是输入的管理员用户,本文示例是weblogic,具体名称根据实际而定),见下图:
5、点击“口令”选项卡,见下图:
6、输入两次新口令(口令规则至少包含字母和数字且长度不少于8,否则检验通不过),点击保存,提示设置更新成功。如下图:
7、如果已修改启动时免输入用户及密码,则还需修改boot.properties中password改为新密码明文,并重启该域服务,使其加密为密文。
首先登录相应的域控制台。建议多个应用程序分开部署到不同的域。
1、在控制台左边的“域结构”列表中点击“部署”,右边如下图:
2、在控制台左边的“锁定并编辑”按钮,右边窗口的“安装”按钮将显示可见。
3、点击右边窗口的“安装”按钮,右边窗口出现下图:
4、点击“上载文件”,出现下图:
5、点击部署档案的“浏览…”按钮,选择要发布的应用程序war包,出现下图:
6、点击上部的“下一步”按钮,提示上载文件成功,见下图:
7、继续点击上部的“下一步”按钮,出现下图:
8、选择“将此部署安装为应用程序”(默认),点击上部的“下一步”,出现下图:
9、根据需要可修改名称,其它选项保持默认,点击“完成”,显示成功安装部署,见下图:
10、点击左边窗口的“激活更改”,此时安装成功,还需要启动服务。见下图:
11、在右边窗口的部署列表中,勾选要启动的项目(如dgsifi),出现下图:
12、点击“启动”,选择“为所有请求提供服务”,见下图:
13、点击“是”按钮,进行应用程序启动处理,成功如下图所示,失败则在消息栏中显示错误信息。应用程序访问连接如:http://<ip>:<port>/dgsifi
1、在控制台左边的“域结构”列表中点击“部署”后,右边窗口显示已部署的应用程序列表,勾选要删除的应用程序,点击“停止”按钮,选择“立即强制停止”,强行停止应用程序运行状态,见下图:。
2、点击“是”,出现下图:
3、点击左边窗口的“锁定并编辑”按钮,再勾选应用程序后,出现下图:
4、点击部署列表表头或表脚的“删除”按钮,出现下图:
5、点击“是”,进行删除处理后,出现下图:
6、点击左边窗口的“激活更改”按钮,完成删除操作。
在实际工作中,出于管理和维护上的方便,要求各个域的启动和关闭脚本集中存放,应用程序的日志、临时文件等也要集中存放,下面以XX金融项目为例,说明集中管理的具体实现,其它项目可参考此方法进行管理。
在用户weblogic下,已安装weblogic server,并已创建3个域,域的路径为/home/weblogic/Oracle/Middleware11g/user_projects/domains/sifimis(或exchgsvr或siftp),各域相关信息分别如下:
序号 |
域名 |
端口号 |
用途 |
部署的应用程包名 |
1 |
sifimis |
8080 |
管理系统 |
XXX1.war |
2 |
exchgsvr |
8081 |
交换系统 |
XXX2.war |
3 |
siftp |
8082 |
社保FTP服务 |
XXX3.war |
在weblogic下,创建目录user_app,其下再创建相应目录,目录结构及用途如下表:
主目录:/home/weblogic/user_app/
序号 |
目录 |
用途 |
1 |
bin |
启动域和关闭域脚本 |
2 |
app_paths/decryptFile |
存放XXX文件 |
3 |
app_paths/ downloadFile |
存放XXX文件 |
4 |
app_paths/logs |
存放日志文件,包括与应用系统相关的所有日志,如服务器日志、业务日志等 |
5 |
app_paths/fat |
存放主机接口格式文件 |
6 |
app_paths/send |
存放上送主机的文件 |
7 |
app_paths/sendFile |
存放上送XX的文件 |
8 |
app_paths/tempFile |
存放社保ftp的临时文件 |
9 |
app_paths/upload |
存放上传下载的临时文件 |
可用脚本dir.sh创建以上目录,在/home/weblogic下执行dir.sh,dir.sh内容如下:
mkdir user_app mkdir user_app/bin mkdir user_app/app_paths mkdir user_app/app_paths/decryptFile mkdir user_app/app_paths/downloadFile mkdir user_app/app_paths/logs mkdir user_app/app_paths/fat mkdir user_app/app_paths/send mkdir user_app/app_paths/sendFile mkdir user_app/app_paths/tempFile mkdir user_app/app_paths/upload
﹡特别声明:只有设置了启动免输入用户和密码的情况下,目录bin下的启动脚本才能够执行成功。
路径:/home/weblogic/user_app/bin,该目录下的脚本文件须具有执行权限,可用命令赋予:chmod 755 *
因暂时无法找到把完整weblogic控制台信息写到指定文件,采用重定向输出方式,把控制台信息写入指定服务器日志文件/home/weblogic/user_app/app_paths/logs/appserver.log。
用法:命令 域名,如启动管理系统:./start_svr.sh sifimis。start_svr.sh内容如下:
if [ "$1" = "" ] ; then echo "缺少参数,命令执行错误!用法:start_svr.sh sifimis(参数为域名)" exit 1 fi if [ "$1" != "sifimis" -a "$1" != "exchgsvr" -a "$1" != "siftp" ] ; then echo "参数错!参数为域名sifimis/exchgsvr/siftp" exit 1 fi SVR_HOME="/home/weblogic/Oracle/Middleware11g/user_projects/domains/$1" SVR_LOG="/home/weblogic/user_app/app_paths/logs/appserver.log" nohup ${SVR_HOME}/startWebLogic.sh >>${SVR_LOG} 2>&1 & echo "启动执行完毕,请稍后检查启动情况."
./start_svr.sh sifimis
./start_svr.sh exchgsvr
./start_svr.sh siftp
./start_svr.sh exchgsvr
./start_svr.sh siftp
./start_svr.sh sifimis
用法:命令 端口号,如关闭管理系统:./shutdown.sh sifimis。shutdown.sh内容如下:
if [ "$1" = "" ] ; then echo "缺少参数,命令执行错误!用法:shutdown.sh sifimis(参数为域名)" exit 1 fi if [ "$1" != "sifimis" -a "$1" != "exchgsvr" -a "$1" != "siftp" ] ; then echo "参数错!参数为域名sifimis/exchgsvr/siftp" exit 1 fi if [ "$1" = "sifimis" ]; then port=8080 svrname="管理系统" fi if [ "$1" = "exchgsvr" ]; then port=8081 svrname="交换系统" fi if [ "$1" = "siftp" ]; then port=8082 svrname="XX服务系统" fi ##取端口侦听的进程号及程序名,如1023/java var=$(netstat -anp|grep 127.0.0.1:$port |awk '{print $7}') if [ "${var}" != "" ] ; then ##截取进程号 java_pid=${var%/*} kill -9 $java_pid sleep 2 echo --$svrname已被关闭-- else echo $svrname没有启动! fi
./shutdown.sh sifimis
./ shutdown.sh exchgsvr
./ shutdown.sh siftp
./ shutdown.sh sifimis
./ shutdown.sh exchgsvr
./ shutdown.sh siftp
由于各系统启动时已把控制台信息通过重定向输出方式以追加形式写入日志文件user_app/app_paths/logs/appserver.log中,该文件将会越来越大,因此需要设置为自动截断,截断方式有两种:每日或按大小,下面介绍按日进行截断的设置方案。
用linux操作系统自带的logratate工具定期整理日志,用root用户操作:
1、创建脚本
#vi /etc/logrotate.d/appserverlog (使用root用户, appserverlog为配置文件名,也可取其它名称)
/home/weblogic/user_app/app_paths/logs/appserver.log { rotate 60 daily copytruncate notifempty missingok }
其中:
rotate 60 表示保留60天的备份文件
daily 表示每天整理一次
copytruncate 表示先复制log文件的内容,然后再清空
missingok 表示如果找不到log文件也没OK
notifempty 表示如果log文件是空的,就不进行rotate
2、/usr/sbin/logrotate -f /etc/logrotate.conf执行生效(即时切断日志,生成新日志文件)。
3、特别说明:
每天系统时间换日后生成的日志备份文件名为appserver.log -yyyymmdd,yyyymmdd是生成备份文件的日期,文件内容是该日期之前的内容。