ラベル Linux の投稿を表示しています。 すべての投稿を表示
ラベル Linux の投稿を表示しています。 すべての投稿を表示

2011年7月7日木曜日

Javaプログラム(jar)をLinux上でデーモン起動する

意外と半日ぐらいかけてしまったので、今後のためにメモ。
(無理やりねじ伏せたところがあるので要注意)

環境

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


スクリプト


ファイル名: /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 $?

ハマったのは、STOPするためにプロセスIDを記載したpidファイルを生成しないといけない箇所(startのとこ)。
自前で作ったJavaプログラムならプログラム内で自由にファイル生成できるけど、サードパーティのプログラムなんでプログラムからは生成できない。
というわけで、pgrepコマンドを利用しました。

# pgrep -f "コマンドライン文字列"

で、そのコマンドのプロセスIDが取得できるので、その内容をpidファイルとしてリダイレクト。
これでなんとか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。言いたいことが山ほどあるぞ。
ランタイムは良いのかもしれないけど、製品以外の部分(要はウ○ング○ークさん)はもう全然ダメ。
これがデファクトって、すごいよね。帳票部分ってよっぽど誰もやりたがらない分野なんだろうね。
まぁ、わかるけど。

2008年4月24日木曜日

Linux周辺で気になるニュースいくつか

お久しぶりです。全然更新できてません。

さて、最近コンソーシアム関連および仕事関連(どちらかというと仕事の方が比重高い)でXMLと触れ合う機会が多くなりました。時間を見つけては勉強中ですが、さすがに勘が衰えたのか年をとってしまったのか、昔のようにはすんなり頭に入ってきません。悲しいなぁ。

さて、Linuxデスクトップ関連のニュースが少し出ているので、いくつか。

「Silverlight」のLinux版「Moonlight」、アドビのAIRと同等の機能を実現へ
http://japan.cnet.com/svc/nlt2?id=20371813

「LinuxユーザーのCurl利用拡大を図る」---米カール,勢いのあるUbuntu Linuxに対応
http://itpro.nikkeibp.co.jp/article/NEWS/20080418/299497/

一般個人向けデスクトップLinuxは開発しない - Red Hatが公式ブログで表明
http://journal.mycom.co.jp/news/2008/04/18/024/

アプリケーションのプラットフォームたるエンジン部分(MoonlightやCurl)がLinuxデスクトップへの対応を表明しているにも関わらず、Linuxデストリビューションの雄、Redhatがデスクトップ分野からの撤退表明(やっぱりWindowsに軍配っす、という表明?)。

マーケ的には「Linuxデスクトップを普及させるにはキラーアプリの投入!」という観点でアプリのプラットフォームをまずはLinux対応させて、そこからその上で動くアプリを充実させていく、というのは綺麗な流れではあるけど、そもそもの根っこが折れると相当痛い。

ただ、Redhatは降りたけど、Ubuntuは結構な勢いで伸びているので(このブログですら過去に取り上げたぐらいですから)、今後の勢力図がどういう風になっていくのか、ちょっと注目しておこうと思います。

PS.
http://d.hatena.ne.jp/curl/20080421#1208746848
「ITセレブな創業者」というUbuntuの表現に、なんだかしっくりきました(笑)

PS2.
たまには宣伝。IdbAは、JavaベースなのでもちろんLinuxでもわんさか動きます。

2007年12月13日木曜日

ubuntu 7.10 desktopをVMWareで

このところ大人気のubuntuをisoイメージで落としてきてCDに焼いたので、VMwareにインストールしてみようとトライ。
以前からもっていたVMware 4.0.5に入れようとしたところ、インストーラでKernel Panic。
実は以前からSUSEやCentやTurboをVMwareに入れようとトライしているが、毎度インストーラでKernel panicになって全然インストールできない。
【追記】調べたところ、Kernel 2.6のサポートはVMware 4.5 laterだった…。

そこで、ubuntuのHP記載内容に素直に従って、最新のVMware Playerをインストールすることに。
ubuntuの最新7.10は、HTTPではtorrentファイルしか配布していない。

torrent。恥ずかしながら、今回初めて知りました。いかんせん、P2Pソフト等は一切利用しない主義なもので。
しかし背に腹はかえられぬ。BitTorrentをダウンロード、インストールして、BitTorrentでzipをゲット。


めでたくzipをゲット完了。


以下は、ubuntuのHPに書いてある情報に、ボクが実際にやった時のキャプチャをつけただけなんであんまり役には立たないと思いますが、こんな感じなんだ、とイメージしたい方向けに。

zipを解凍。さすがに解凍には結構な時間がかかる。
解凍が終わったら、VMware用の「vmx」ファイルがあるのを確認。


VMware Playerを起動!


「開く」で、先ほどのvmxを指定。


VMwareの起動ロゴが表示され、しばらくするとubuntuの起動画面が表示される。


まずはセットアップ画面が表示される。キーボードやタイムゾーンなど、通常のLinuxインストールとほとんど同じ。ユーザー情報を入力した後、やたら長いこと待たされるが、あせらずじっくり待つ。


仕切りなおしたように画面が再表示され、ubuntuのログイン画面が表示される。


先ほど作成したユーザでログイン。ネットワーク設定も済んでおり、FireFoxでいきなりネットサーフィンできちゃいました。そして、意外とサクサク動きます。



とりあえず、ようやくLinux Desktop環境が出来たので、これでいろいろとまた試す土壌ができた。
ふぅ、長かった…。

【追記】
画像が見事に切れて表示されてますね…。
とりあえず雰囲気はわかっていただけると思うので、そのままにしておきます。