- PR -

weblogic6.0で外部コマンドの実行に失敗する

投稿者投稿内容
miki
会議室デビュー日: 2004/04/09
投稿数: 11
お住まい・勤務地: 東京
投稿日時: 2005-08-11 23:52
weblogic6.0(OS はWindows NT からアップグレードした
Windows 2000 Server)でサーブレットから
Runtime.exec(String)で外部コマンドを呼び出しているのですが、
外部コマンドを絶対パスを指定して実行したときのみ
コマンドの実行ができるのですが、そうでないと
(環境変数のPATHを使って「hoge(.exe)」のように実行しようとすると)
プロセスの生成に失敗したという例外が発生します。
このWeblogicはサービスから起動しているのですが、
startWebLogic.cmdからweblogicを起動したときは
「hoge」だけでコマンドの実行ができます。
また、Windows NT からアップグレードしないでインストール
したWindows 2000 Server上では、サービスとして起動しても
startWeblogic.cmdから実行しても、「hoge」だけで
コマンドの実行ができます。

話をまとめると、WindowsのサービスからWeblogicを実行しているときに
外部コマンドを呼び出したとき、環境変数のPATHが
認識されていないことがあるのではないかと思うのですが、
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/lang/Process.html
に書かれているように、
「Runtime.exec の各メソッドは、特定のネイティブなプラットフォーム上の
特殊なプロセスではうまく動作しない場合があります」
ということになるのでしょうか?
それとももっと確かめたほうが良いことがありますでしょうか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-08-12 00:13
PATH 環境変数の問題だと思います。サービス登録時にどのように登録していますか?
以下のように、ログから確認することもできます。

####<1977/06/17 15:46:11:JST> <Info> <Management> <yourmachine> <myserver> <main> <system> <> <141034> <Java システム プロパティ: java.library.path = C:/bea61sp7/jdk131/bin;......................>
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-08-12 00:17
#オフトピックです
先日も触れましたが、 WLS6.0 は既にサポート終了しています。
出来る限り早い段階でサポート対象のバージョンへ移行することをお勧めします。
http://edocs.beasys.co.jp/e-docs/wls/certifications/certs/eol.html

最新版は 9.0 になります。
http://edocs.beasys.co.jp/e-docs/wls/docs90/index.html
https://www.beasys.co.jp/BeaPortal/download/generalNew/begin.do?ID=1&VERSION_KEY=27

枯れていて安心できるのだと 8.1 になるでしょうか。
http://edocs.beasys.co.jp/e-docs/wls/docs81/index.html
https://www.beasys.co.jp/BeaPortal/download/generalNew/begin.do?ID=1&VERSION_KEY=20
miki
会議室デビュー日: 2004/04/09
投稿数: 11
お住まい・勤務地: 東京
投稿日時: 2005-08-12 04:35
引用:

インギさんの書き込み (2005-08-12 00:17) より:
#オフトピックです
先日も触れましたが、 WLS6.0 は既にサポート終了しています。
出来る限り早い段階でサポート対象のバージョンへ移行することをお勧めします。
http://edocs.beasys.co.jp/e-docs/wls/certifications/certs/eol.html



そうですよね。
けれど、保守契約の更新をやめてしまって
新しくWeblogicを買うつもりはないとのことなのです。
miki
会議室デビュー日: 2004/04/09
投稿数: 11
お住まい・勤務地: 東京
投稿日時: 2005-08-12 16:33
サービスの登録はinstallNtService.cmdを使いました。
java.library.pathを見てみたところ、
hoge.exeへのパスが通っておらず、
E:\\bea\\wlserver6.0\\bin;.;C:\\WINNT\\system32;C:\\WINNT;
となっていました。
E:\\bea\\wlserver6.0\\binは-extrapathで指定されているものですが
それ以降のパスはどこで指定されているものか不明です。
(システム環境変数はhoge.exeへのパスが通っています)

また、先日サービスとして起動しても「hoge」だけで
実行できたサーバのログを見ると、hoge.exeへのパスが
通っていました。

そこで、一度、サービスをアンインストールして
installNtService.cmd のset CMDLINEに
-Djava.library.path=E:\\bea\\wlserver6.0\\bin;%PATH%
を設定してサービスをインストールしたところ、
起動時のログにはhoge.exeへのパスが通っていました。

ところが、この状態でもhoge.exeは実行できません。
実行できない原因は何なのでしょうか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-08-12 17:10
WebLogic と切り離して考えてみましょう。
スタンドアロンの Java アプリケーションで、PATH 環境変数ではなく、-Djava.library.path オプションで指定したパスにあるコマンドを起動できますか?
miki
会議室デビュー日: 2004/04/09
投稿数: 11
お住まい・勤務地: 東京
投稿日時: 2005-08-22 16:08
引用:

WebLogic と切り離して考えてみましょう。
スタンドアロンの Java アプリケーションで、PATH 環境変数ではなく、-Djava.library.path オプションで指定したパスにあるコマンドを起動できますか?



起動できませんでした。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-08-22 17:38
>起動できませんでした。
ですよね。(すいません、わたしは未検証でした)
JVM を起動する際に PATH環境変数に設定する必要があるのでしょう。
何事も問題の根本を出来る限りシンプルな状態で発生させるのが切り分けの近道です。

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