- PR -

Javaアプリのサービス化

1
投稿者投稿内容
未記入
会議室デビュー日: 2005/01/12
投稿数: 2
投稿日時: 2005-01-12 22:53
はじめまして。

JBoss3.2x, Java1.4.x を使ってアプリケーションを作っています。
実はアプリケーションをサービス化してほしいとの依頼を受けましたが、
失敗しました。

Windows では JavaService を使って NTサービス化できました。
しかし、AIX 5.0 では Jakarta Commons Daemon を使おうトライして
みたのですが、jsvc の Cコンパイルに失敗しまして、途方にくれています。
Cコンパイルには、ANSI C準拠のものが指定されていますが、
VisualAge C++ Professional / C for AIX Compiler バージョン6 を使用しています。
このCコンパイラは ANSI C準拠でしょうか?

どなたか助けていただけないでしょうか?宜しくお願いします。

OS: AIX 5L (PowerPC, 64bit JVM)
Java: JRE1.4.1
※jar化はWindowsで実行しています。


おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2005-01-12 23:04
Javaの質問では無い気がしますが、、、
引用:

しかし、AIX 5.0 では Jakarta Commons Daemon を使おうトライして
みたのですが、jsvc の Cコンパイルに失敗しまして、途方にくれています。


AIXは全く触ったことがないのですが、確かIBMのUNIX OSですよね?
UNIXの場合、わざわざツールを使わなくてもご所望の「サービス化」は
可能だと思いますよ。

通常、Javaに限らずUNIX系OSではデーモンプロセスの起動・停止に
シェルスクリプトを用います。ご自身でJBossを起動・停止するための
スクリプトを組まれてはいかがでしょうか。

起動時にJBossのプロセスIDをファイルに書き込んでおき、停止時は
そのプロセスIDを元にkillコマンドでプロセスを停止する、等の処理を
します。もしくは、JBossの停止専用のコマンドがあるのでしたら、
それを実行しても良いでしょう。

ところで、どうしてもjsvcとやらをコンパイルしたいのであれば、
現状コンパイル時に発生するエラーメッセージを示して頂かないと
何ともコメントしようがありません。
佐々木
大ベテラン
会議室デビュー日: 2003/03/30
投稿数: 121
投稿日時: 2005-01-13 00:57
引用:

AIXは全く触ったことがないのですが、確かIBMのUNIX OSですよね?
UNIXの場合、わざわざツールを使わなくてもご所望の「サービス化」は
可能だと思いますよ。


単にバックグラウンドで動いていれば良いというのであれば、nohupで起動してあげれば良いのですが、いっぱしの「デーモン」を名乗るならば、

  • カレントディレクトリが"/"で、
  • 制御端末を持たず、
  • セッションリーダである

というぐらいの「お作法」を押さえておくとカッコイイですね。、きっとjsvcというのはその辺のことをやってくれるんでしょう(使ったことはありませんが)

私はそういうのはperlでラッパースクリプトを書いてました。POSIXモジュールでsetsidが使えるので。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2005-01-13 02:02
引用:

いっぱしの「デーモン」を名乗るならば、

  • カレントディレクトリが"/"で、
  • 制御端末を持たず、
  • セッションリーダである

というぐらいの「お作法」を押さえておくとカッコイイですね。


なるほど。そういう作法があるんですねえ。
ちなみに、RedHatのrcスクリプトにはコマンドをデーモン化するシェルの関数(*1)が
入っていると思うんですが、それが仰るようなことをやってくれているのでしょうか?
もしそうだとしたら、未記入さんはそのシェルスクリプトを参考にされると良いでしょうね。

(*1): 手元のVine Linux 2.5CRだと/etc/rc.d/init.d/functionsのdaemon関数が
   それに当たります
未記入
会議室デビュー日: 2005/01/12
投稿数: 2
投稿日時: 2005-01-17 09:51
ありがとうございます。
早速、デーモン起動用シェルスクリプトで対応する方針で進めました。
シェルスクリプト単体での起動・終了には成功しました。

しかし rc.2 で デーモン起動することには失敗していまして、現在調整中です。
成功しましたら、また投稿させていただきたいと思います。(詳細に書きます)
ありがとうございました。

--
今回はデーモン化すシェルの関数を使用する余裕はありませんでした。
Linuxだとサンプルや関数が充実しているんですね!参考になります!
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2005-01-17 10:51
引用:

シェルスクリプト単体での起動・終了には成功しました。
しかし rc.2 で デーモン起動することには失敗していまして、
現在調整中です。


なるほど。お疲れ様です。
「シェルスクリプト単体での実行には成功するのにOS起動時にinitから実行すると
成功しない、」という場合には、以下のポイントを考えてみるとイイですよ。
ざっくり言うと、スクリプト実行時の環境(環境変数だけでなくもろもろ)の違いが
原因のことが多いです。

  • 実行時の環境変数の違い
  • 実行時のユーザ権限の違い
  • 実行時のカレントディレクトリの違い
  • 実行時の他プロセスの起動状況の違い(他のプロセスに依存していませんか?)

とりあえず、思いつくのは以上ですね。
スクリプト内で/tmp辺りにログを吐く様にして、そこにありったけの手がかりに
なりそうな情報を書き込んでみると良いですよ。

それでは、引き続き頑張ってくださいね。
1

スキルアップ/キャリアアップ(JOB@IT)