目前,许多银行的服务器端操作系统彩的是Unix系统。作为系统的中心平台,Unix上往往运行了大量的应用服务程序,以响应客户端的各种请求。随着银行业务的增多,应用范围的扩大,这些应用程序也越来越多,这就带来了一系列的维护负担和运行风险。由于每一次开机都需要管理员逐个启动应用服务程序(包括数据库系统),每一次关机也面临同样的问题以保证程序和数据的完整性。为将各种损失减少到最小,实现启停过程中各项操作的自动化管理具有十分重要的意义。本文以SCO Unix OpnServer 5.0 为便,介绍实现应用服务程序的自动启停方法。
启停过程
SCO Unix OpenServer系统启动和关机时调用的各种程序存放在/etc/init.d目录下,并在/etc/rcn.d目录(其中n代表运行级: 0、1、2、3)中建立了相应的符号连接,对应系统开关时所执行的各项步骤。Unix启动过程由boot程序引导核心:/stand/unix开始,随后启动一个称为init的进程,顺序执行/etc/inittab文件中所列的程序项,最后引导系统进入特定的运行级。相关的文件和目录主要有:
/etc/default/boot
/etc/init.d及/etc/rcn,/etc/rcn.d (n代表运行级)
其中/etc/default/boot是一个文本文件,规定了Unix引导过程的参数设置。/etc/inittab也是一个文本文件,其内容由独立的命令行组成。init进程顺序读取各行,生成相应的运行级,并指向文件/etc/rcn和目录/etc/rcn.d。/etc/rcn是一个shell程序,当系统进入运行级n时,init就将对应的rcn投入运行。例如运行级2对应文件/etc/rc2和目录/etc/rc2.d,/etc/rc2的主要任务是运行/etc/rc2.d目录下的所有shell程序文件,优先顺序由程序名来区分。
在任何时候,系统只能处在一个运行级上,即系统的运行模式惟一。SCO Unix OpenServer设置了6种运行模式:0、1、2、3、6、S。其中0代表关机,1和S代表进入单用户进行系统维护,6代表系统重启,2和3表示进入多用户,3比2多了启动远程文件共享(RFS)和相应的守护进程,使本机可以连到RFS网络,以实现网络资源共享。
本文示例要求Unix系统引导完毕后自动启动Informix-Online 数据库系统,然后启动中间件产品(TongLINK/TongEASY通信软件,位于/home/tong目录下)及备份代理服务程序/etc/bkupexec/agent.be,关机时按以上反方向顺序自动关闭程序和处理数据。
根据以上要求,可手动编写两个shell程序:DBcomm及Backup。DBcomm处理数据库及通信软件,Backup处理备份代理服务程序。
数据库及通信软件的启停处理
1.以server用户注册,建立shell程序start.sh 和 stop.sh,负责数据库及通信进程的启动和关闭。
$vi /home/server/bin/start.sh
oninit
sleep 5
tld
tminit
$vi /home/server/bin/stop.sh
tld stop
tmend -97
onmode -ky
sleep 5
2.以root用户注册,在/etc/init.d/目录下建立DBcomm 程序。
#vi /etc/init.d/DBcomm
PATH=/bin:/usr/bin:/etc
export PATH
rval=0
set_return() {
/*实现正常退出*/
……
}
case $1 in
/*执行start.sh程序,启动数据库和通信进程*/
‘start’)
if [ -x /home/server/bin/start.sh ]; then
su -l server -c start.sh
set_return
else
rval=2
fi
;;
/*执行stop.sh,关闭数据库及通信进程*/
‘stop’)
if [ -x /home/server/bin/stop.sh ]; then
su -l server -c stop.sh
set_return
else
rval=2
fi
;;
*)
echo “usage: $0 {start|stop}”
rval=1
;;
esac
exit $rval
备份代理服务程序
在/etc/init.d目录下建立备份代理服务程序:Backup。
#vi /etc/init.d/Backup
DESTDIR=/etc/bkupexec
if [ ! -d $DESTDIR ]then
exit
fi
case “$1” in
/*启动备份代理进程*/
‘start’)
if [ -x $DESTDIR/agent.be ]then
$DESTDIR/agent.be -c $DESTDIR/agent.cfg 2>$DESTDIR/agent.log &
fi
;;
/*关闭备份代理进程*/
‘stop’)
pid=`` ps -e|grep agent.be|sed -e ‘s/^ *//’ -e ‘s/.*//’`` /*查找进程*/
if [ “${pid}”!= “” ]then
kill ${pid}
fi
;;
*)
echo “Usage: /etc/init.d/agent.be { start | stop }”
;;
esac
符号连接
首先,建立到目录/etc/rc2.d下的符号连接,以实现Unix系统引导后的自动调用。该目录下程序均以P或S开头命名,P开头的优先运行,S次之,P和S后的数字按从小到大顺序执行。假设S后的数字最大已到99,执行以下命令:
#ln -s /etc/init.d/DBcomm /etc/rc2.d/S100DBcomm
#ln -s /etc/init.d/Backup /etc/rc2.d/S101Backup
然后,建立到目录/etc/rc0.d下的符号连接,以实现Unix系统关机前的自动调用。该目录下的程序均以K打头,运行顺序同上。因为首先需要安全关闭应用程序,所以新建连接K后的数字要小于现有数字。假设当前最小为10,执行以下命令:
#ln -s /etc/init.d/Backup /etc/rc0.d/K05Backup
#ln -s /etc/init.d/DBcomm /etc/rc0.d/K06DBcomm
小 结
经过上述设置后,每当在Unix系统中追加一项应用服务程序时,只需在/etc/init.d中编写类似shell程序,同时建立到/etc/rc0.d 和/etc/rc2.d的符号连接,便可轻松实现应用服务程序的自动化管理,数据也得到了充分有效的保护。