(無理やりねじ伏せたところがあるので要注意)
環境
OS: CentOS release 5.6 (Final)デーモン起動させたいプログラム:SVF Connect [Server] (svf.jar)
詳細はウィングアークさんのページへ。製品知らないと見てもわからんと思うけど、要は Java製の常駐プログラムです。
適宜、ご自身で作成したものと読み替えてください。
(追記)インストール後のディレクトリ掘ったらいたわ…「SvfJavaConnectServer」。そういう大事なことはマニュアルかどっかに書いといてよ…半日潰したのに(涙)
基本方針
/etc/init.d にスクリプトを用意してランレベル別にリンクを設定(基本が大事かなってことで)以下、内容。
設定ファイル
ファイル名: /etc/sysconfig/svfrserver
#
# SVF Connect [Server] Settings
#
#--------------------------------------------
# CLASSPATH(実行に必要なjar)
#--------------------------------------------
SVF_LIB=/opt/svfjp/svfjpd/lib
CLASSPATH=.:$SVF_LIB/svf.jar
CLASSPATH=$CLASSPATH:$SVF_LIB/vfpdfparser.jar
CLASSPATH=$CLASSPATH:$SVF_LIB/vfgrph.jar
CLASSPATH=$CLASSPATH:$SVF_LIB/jai_codec.jar
CLASSPATH=$CLASSPATH:$SVF_LIB/jai_core.jar
CLASSPATH=$CLASSPATH:$SVF_LIB/forme.jar
export CLASSPATH
#--------------------------------------------
# Java Boot Options(ここは結構苦し紛れ)
#--------------------------------------------
SVF_JAVA_OPTIONS=-Xrs
SVF_MINMEM=-Xms1024M
SVF_MAXMEM=-Xmx1024M
export SVF_JAVA_OPTIONS
export SVF_MINMEM
export SVF_MAXMEM
#--------------------------------------------
# SVF Connect [Server] Boot Options
#--------------------------------------------
FIT_PRODUCTS_BASE=/opt/svfjp
SVFLOGDIR=/var/log/svfrserver.log
SVF_OPTIONS="-L$SVFLOGDIR"
export SVF_OPTIONS
# SVF Connect [Server] Settings
#
#--------------------------------------------
# CLASSPATH(実行に必要なjar)
#--------------------------------------------
SVF_LIB=/opt/svfjp/svfjpd/lib
CLASSPATH=.:$SVF_LIB/svf.jar
CLASSPATH=$CLASSPATH:$SVF_LIB/vfpdfparser.jar
CLASSPATH=$CLASSPATH:$SVF_LIB/vfgrph.jar
CLASSPATH=$CLASSPATH:$SVF_LIB/jai_codec.jar
CLASSPATH=$CLASSPATH:$SVF_LIB/jai_core.jar
CLASSPATH=$CLASSPATH:$SVF_LIB/forme.jar
export CLASSPATH
#--------------------------------------------
# Java Boot Options(ここは結構苦し紛れ)
#--------------------------------------------
SVF_JAVA_OPTIONS=-Xrs
SVF_MINMEM=-Xms1024M
SVF_MAXMEM=-Xmx1024M
export SVF_JAVA_OPTIONS
export SVF_MINMEM
export SVF_MAXMEM
#--------------------------------------------
# SVF Connect [Server] Boot Options
#--------------------------------------------
FIT_PRODUCTS_BASE=/opt/svfjp
SVFLOGDIR=/var/log/svfrserver.log
SVF_OPTIONS="-L$SVFLOGDIR"
export SVF_OPTIONS
スクリプト
ファイル名: /etc/init.d/svfrserver
#!/bin/sh
#
# description: Starts and stops the SVF Connect for .NET Server daemon
#
# pidfile: /var/run/svfrserver.pid
# config: /etc/svfrserver/svfrserver.conf
# Source function library.
if [ -f /etc/init.d/functions ] ; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
. /etc/rc.d/init.d/functions
else
exit 1
fi
# Avoid using root's TMPDIR
unset TMPDIR
if [ -f /etc/sysconfig/svfrserver ]; then
. /etc/sysconfig/svfrserver
fi
pidfilename=svfrserver
pidfile=/var/run/$pidfilename.pid
# 自作プログラムの時は以下で指定
bootclass=jp.co.fit.vfreport.SvfrServer
# コマンドラインで実行する内容
cmdline="java $SVF_JAVA_OPTIONS $SVF_MINMEM $SVF_MAXMEM $bootclass $SVF_OPTIONS"
RETVAL=0
start() {
KIND="SvfrServer"
echo -n $"Starting $KIND services: "
daemon --pidfile=${pidfile} "$cmdline &"
RETVAL=$?
# pid
pgrep -f "$cmdline" > $pidfile
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/svfrserver || RETVAL=1
return $RETVAL
}
stop() {
KIND="SvfrServer"
echo -n $"Shutting down $KIND services: "
killproc -p $pidfile $pidfilename
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/svfrserver
echo
return $RETVAL
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 2
esac
exit $?
自前で作ったJavaプログラムならプログラム内で自由にファイル生成できるけど、サードパーティのプログラムなんでプログラムからは生成できない。
というわけで、pgrepコマンドを利用しました。
# pgrep -f "コマンドライン文字列"
これでなんとかSTOPも出来るようになりました。
ランレベル別リンク設定
ランレベル0, 3, 5, 6にシンボリックリンクを作成。ランレベルの詳細はこちら。【例】ランレベル0の設定
# cd /etc/rc0.d
# ln -s ../init.d/svfrserver S16svfrserver
動作確認
# cd /etc/init.d
# ./svfrserver start
Starting SvfrServer services: [OK]
大いに参考にさせていただいたサイト(多謝)
・自作プログラムをサービスで起動・停止する方法 - とみんのブログ・PC覚え書き | プログラムのデーモン化
・ランレベル
しかし、SVF。言いたいことが山ほどあるぞ。
ランタイムは良いのかもしれないけど、製品以外の部分(要はウ○ング○ークさん)はもう全然ダメ。
これがデファクトって、すごいよね。帳票部分ってよっぽど誰もやりたがらない分野なんだろうね。
まぁ、わかるけど。
0 件のコメント:
コメントを投稿