人に聞けない痔の悩み、これでスッキリ >>

Javaプログラムを実行するホストとは別にあるホスト(UNIX)のシェルをJavaプログラムから実行させたいのですが、どのようにプログラミングすればいいでしょうか?
宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>>「1)の系コマンドを通じて自マシンから、別ホストのスクリプトが実行できるように環境を整える。


は具体的にどのようにすればいいのでしょうか?

このあたりは、Unixに関して、それなりの知識と権限が無い方にはできません。なので、Unixの管理者にご相談・協力をお願いしてみてください。

なお、以下のURLも参考になると思います。

http://d.hatena.ne.jp/sugimotokazuya/20070921
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2009/07/07 21:43

手元もUNIX系マシンとすれば、



1)r系コマンドを通じて自マシンから、別ホストのスクリプトが実行できるように環境を整える。
2)以下のような雰囲気のプログラムで、r系コマンドをJavaプログラムから実行可能とする。

http://www5.big.or.jp/~tera/Labo/Java2/runtime.h …

で、可能になる気がします。ただ、別ホストの実行結果の取得なども考えると、もう少しややこしいことになると思います。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございました。
Javaプログラムを実行するホストはWindows2003SerVerです。
「1)の系コマンドを通じて自マシンから、別ホストのスクリプトが実行できるように環境を整える。」
は具体的にどのようにすればいいのでしょうか?
大変申し訳ありませんが宜しくお願い致します。

お礼日時:2009/07/05 05:09

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qjavaサーブレットから別サーバのバッチ起動

お世話になります。
現在、javaサーブレットからDBサーバにあるバッチを起動するプログラムを作成しております。

HPなどで色々調査したのですが実現方法が、よくわからず困っております。
参考となるHPやコーディング例がありましたら教えて頂けないでしょうか。

javaサーブレットの環境は、
 centOS 5.5、jdk 1.6、tomcat 5.5となります。

お手数お掛け致しますが、よろしくお願い致します。

Aベストアンサー

若干邪道ですが、お手軽な方法として ssh でキックしてしまう方法もあります。
参照URLのように正規に java で実行する方が柔軟な呼び出しができますが、
java.lang.Runtime.exec() で直接 ssh を呼び出してもいいかもしれません。
# この場合は pure java ではなくなるので、メンテナンス性を考えると邪道です。

Webからバッチをキックする場合は、2度押しなど複数キックされることもあるので、実際のバッチ担当者とうまく詰めて実装しないといけないですね。

参考URL:http://d.hatena.ne.jp/n_shuyo/20060706/1152162198

Qhtml上で、バッチやexeファイルの起動をしたい

わけあって、学校(養護学校)初心者向けにhtmlでメニューを作っています。
さて、スタートボタンやディスクトップにショートカットを使わず、htmlの中からバッチファイルやexeファイルを起動できるでしょうか?

もし可能ならば、教えてください。OSはWindows XPで起動したいファイルはexeファイルとバッチファイルです。
よろしくお願いします。

Aベストアンサー

<html><head></head>
<body>
<a href="file:///c:/windows/system32/calc.exe">電卓</a>
</body>
</html>

Qファイル読み込み/書き込み速度を上げるには

下記のようなファイルの読み込み/書き込み処理において、もっと効率よく(速く)読み込み・書き込みをしたい場合どのような工夫をすれば良いでしょうか?

BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("sample2.data"));
BufferedInputStream in = new BufferedInputStream(new FileInputStream("sample1.data"));
int c ;
while((c = in.read()) != -1)
{
out.write(c);
}
in.close();
out.flush();
out.close();

Aベストアンサー

速くなるかどうかは環境によって微妙に違うと思いますが、効率よくやる方法が2つあります。

1. 1バイトづつ読み書きするのではなくて byte[] で1000バイトとかの塊を読んでそのまま塊を書くようにする。(こうすると read, write をする回数が減るので少し速いと思います)。

2. FileInputStream と FileOutputStream のインスタンス双方から getChannel() で java.nio.channels.FileChannel のインスタンスを取り出し、FileOutputStream 側から取り出した FileChannel のインスタンスに対して transferFrom() で FileInputStream 側から取り出した FileChannel のインスタンスを指定する。

例) in は FileInputStream のインスタンス, out が FileOutputStream のインスタンスの場合。

FileChannel fcin = in.getChannel(), fcout = out.getChannel();
fcout.transferFrom(fcin, 0, fcin.size());

速くなるかどうかは環境によって微妙に違うと思いますが、効率よくやる方法が2つあります。

1. 1バイトづつ読み書きするのではなくて byte[] で1000バイトとかの塊を読んでそのまま塊を書くようにする。(こうすると read, write をする回数が減るので少し速いと思います)。

2. FileInputStream と FileOutputStream のインスタンス双方から getChannel() で java.nio.channels.FileChannel のインスタンスを取り出し、FileOutputStream 側から取り出した FileChannel のインスタンスに対して transferFrom()...続きを読む

QSELECTで1件のみ取得するには?

こんにちわ。
いまORACLE9iを使用している者です。

ACCESSでは
SELECT TOP 1 項目名 FROM テーブル名
ORDER BY 項目名;
で並べ替えたデータ群のうち,先頭の1件だけを
取ることができますが,
ORACLEでそのような機能(SQL)はあるでしょうか?
教えてください。
よろしくお願いします。

Aベストアンサー

order by と rownum を併用する場合は注意が必要です。

[tbl01]
cola | colb
------------
1000 | aaaa
1001 | bbbb

というデータがある場合、
select cola from tbl01 where rownum < 1 order by cola desc;
とすると、「1001」ではなく、「1000」が返されます。
これは、order by の前に rownum < 1 が適用されてしまうからです。

解決するには、
select aaa from (select cola aaa from tbl01 order by cola desc) where rownum = 1;
とすれば良いです。

QTomcatでアクセスログを出力したいのですが。

こんにちは、こちらにはいつもお世話になっております。
さて、今まで作っていたwebコンテンツがようやく完成したのでTomcatにてアクセスログを取得できるようにして公開しようと思いました。
『UNIXな生活』様(http://park15.wakwak.com/~unixlife/java/tomcat5-serverxml.html)
を参考にserver.xmlのValve部分を探し出しコメントアウトを解除し、Tomcatを再起動しました。
しかし何度かコンテンツにアクセスを行っても出力されません。
コメントアウトを解除しただけではアクセスログが出力されないのでしょうか?
デフォルトなのでTomcat5.0\logs内に出来るはずだとは思うのですが…。
試しにサーバを再起動してみてもダメでした。
知恵をお貸しください_(._.)_

Aベストアンサー

ao108 さん、おはようございます。

使用している Tomcat のバージョンと、Tomcat を実行している OS は何でしょうか?
下記の説明は、以下の環境を前提に説明しております。

 Tomcat v5.5.17
 OS : Windows XP(SP2)


さて、アクセスログについてですが、下記の通り設定ファイルを変更してできると思います。

1. Tomcat をインストールしたディレクトリ内にある conf  ディレクトリを開きます。

2. server.xml のバックアップを取っておきます。

3. server.xml をテキストエディタなどで開き、オリジナルの 場合は、338行目と342 行目のコメントを解除します。


---------------------------------------------------------
 変更前
---------------------------------------------------------
    :
    :
338 : <!--
339 :  <Valve className="org.apache.catalina.valves.AccessLogValve"
340 :   directory="logs" prefix="localhost_access_log." suffix=".txt"
341 :   pattern="common" resolveHosts="false"/>
342 : -->
    :
    :


---------------------------------------------------------
 変更後
---------------------------------------------------------
    :
    :
338 : <!-- 2006/08/06 -->    ← コメントを解除
339 :  <Valve className="org.apache.catalina.valves.AccessLogValve"
340 :   directory="logs" prefix="localhost_access_log." suffix=".txt"
341 :   pattern="common" resolveHosts="false"/>
342 : <!-- 2006/08/06 -->    ← コメントを解除
    :
    :


4. server.xml を保存します。

5. Tomcat を再起動します。

6. Webブラウザから、以下の URL にアクセスしてみます。

  http://localhost:8080/

7. Tomcat をインストールしたディレクトリ内にある logs ディレクトリを開きます。


8. logs ディレクトリにアクセスログファイルが作成されています。
 たとえば、2006/08/06 のアクセスログであれば、以下のファイル名で作成されます。

  localhost_access_log.2006-08-06.txt

 また、ログファイルの内容は以下のようになっています。

---------------------------------------------------------
 localhost_access_log.2006-08-06.txt の内容
---------------------------------------------------------
127.0.0.1 - - [06/Aug/2006:05:52:16 +0900] "GET / HTTP/1.1" 200 8132
127.0.0.1 - - [06/Aug/2006:05:52:16 +0900] "GET /tomcat-power.gif HTTP/1.1" 200 2324
127.0.0.1 - - [06/Aug/2006:05:52:16 +0900] "GET /tomcat.gif HTTP/1.1" 200 1934
127.0.0.1 - - [06/Aug/2006:05:52:16 +0900] "GET /asf-logo-wide.gif HTTP/1.1" 200 5866
127.0.0.1 - - [06/Aug/2006:05:52:16 +0900] "GET /favicon.ico HTTP/1.1" 200 21630



以上です。

ao108 さん、おはようございます。

使用している Tomcat のバージョンと、Tomcat を実行している OS は何でしょうか?
下記の説明は、以下の環境を前提に説明しております。

 Tomcat v5.5.17
 OS : Windows XP(SP2)


さて、アクセスログについてですが、下記の通り設定ファイルを変更してできると思います。

1. Tomcat をインストールしたディレクトリ内にある conf  ディレクトリを開きます。

2. server.xml のバックアップを取っておきます。

3. server.xml をテキストエディタなどで開...続きを読む

Qコマンド終了ステータス

rsyncの終了ステータスによってその後の処理を切り替えています.

<src>
rsync -auz --delete $SDIR $DDIR

if [ $? -eq 0 ]; then

 END=`date '+%Y-%m-%d-%H-%M-%S'`
 echo "$END $1 end" >> /home/hoge/log
else

 echo "ERROR! exit status $?" >> /home/hoge/log
fi
</src>

rsyncが正常終了すればlogファイルに時間を記入して,
正常終了しなかったら,終了ステータスを記入します.

もし,rsyncが正常終了したにも関わらず,ちょうどif [ $? -eq 0 ]; thenに入るまえに
他のコマンドが異常終了したら変数$?の値が変わると思います.

かなり気にしすぎかもしれませんが,rsyncだけの終了ステータスに注目するにはどうしたらいいでしょうか?

よろしくお願いします.

Aベストアンサー

>crontabでシェルを動かしているときにkillをしてもkillコマンドの終了ステータスは入ることなくrsyncの終了ステータスをちゃんと受け取れるという理解でよろしいでしょうか?

まず他の方が書いているように、$? はそのシェルプロセスのローカル変数なので、別のプロセス(上記だと、killコマンドを投入した対話型シェルのプロセス)の影響を受けることはありません。

rsync が実行途中でkillされた場合、rsyncの終了ステータス $? は、128+(killのシグナル番号) になります。killのシグナル番号はデフォルトだと15なので、143 ですね。kill -9 とかすると、137 になります。

正確には、「rsyncは15番のシグナルでkillされた」ということがrsyncを呼び出したシェルプロセス(bashとかshとか)に返るので、シェルが+128して、$? にセットして通常の終了(プログラムが自分で狩猟ステータスを指定して終了した)場合と区別できるようにしてます。
あと、126と127もシェルによって予約されたステータスです。
つまり、
・ ?$ が 0~125 → プログラムが終了コードを指定して終了した(Cだとexit(cc);とか return cc;とか)
・ ?$ が 126 → コマンドが存在するが実行に失敗した(実行権限なしなど)
・ ?$ が 127 → コマンドが存在しない(command not found)
・ ?$ が 128 → このケースはたぶん無いはず
・ ?$ が 129~ → コマンドが実行中にシグナル番号($?-128)でkillされた

>crontabでシェルを動かしているときにkillをしてもkillコマンドの終了ステータスは入ることなくrsyncの終了ステータスをちゃんと受け取れるという理解でよろしいでしょうか?

まず他の方が書いているように、$? はそのシェルプロセスのローカル変数なので、別のプロセス(上記だと、killコマンドを投入した対話型シェルのプロセス)の影響を受けることはありません。

rsync が実行途中でkillされた場合、rsyncの終了ステータス $? は、128+(killのシグナル番号) になります。killのシグナル番号はデフォルトだ...続きを読む

QシェルからJavaを起動したい

シェルからJavaを起動したい
上記ですけど、Linuxで毎回「java パッケージ名.クラス名」を打つのは面倒なので、
シェルスクリプトのファイルを作って、それを実行するだけで起動できるようにしようと思っています。
が、クラスが見つからないってエラーが出て実行できませんでした。
(「java パッケージ名.クラス名」を実行しているディレクトリにシェルを作ってます)
恐らく環境変数などの設定がシェルの中にいるのではないかと思いますが、
シェルスクリプトとかLinuxの環境には疎い為、どういった記述が必要なのか解りません。
どなたか例を提示して頂けないでしょうか?

ちなみに、一般的なJavaの環境変数や、
プロジェクト特有・jarファイル等の環境変数は設定済みです。


それから、シェルは以下のように記述してます。

#!/bin/sh
java パッケージ名.クラス名


よろしくお願いします。

Aベストアンサー

状況が明確でないので可能性の一つというだけで役に立たないかもしれないが、
そのシェルスクリプトが存在しているディレクトリをカレントディレクトリにして、

java パッケージ名.クラス名

をコマンドラインで直接打てば動作しており、
また、そのカレントディレクトリでスクリプトを実行した場合にも実行できるが、
他のディレクトリからスクリプトを実行した場合にはクラスが見つからないというエラーになるという状況なら、
クラスパスにそのJavaクラスファイル(のトップ階層)へのパスを追加するか、
スクリプト内でカレントディレクトリを変更するかする必要がある。

例えばディレクトリ構成が、

/a/b/c/シェルスクリプトファイル
/a/b/c/パッケージ名/クラス名.class

になっていて、/a/b/cをカレントディレクトリにして、

java パッケージ名.クラス名

で直接実行したり、シェルスクリプトを起動した場合は実行できて、
他のディレクトリをカレントディレクトリにして実行権限をつけたシェルスクリプトを

/a/b/c/シェルスクリプト

/a/b/c を検索パスに追加しているならシェルスクリプト名だけ

で実行しようとした時にクラスが見つからない場合は、

#!/bin/sh
java -cp /a/b/c パッケージ名.クラス名

のように/a/b/cをクラスパスに指定する。
他にもクラスパスを設定しているならそれも込みでクラスパスを設定する。
スクリプトが置かれているディレクトリがスクリプト実行時のカレントディレクトリに勝手になるわけではない。

もしくは、Javaプログラムの実行中のカレントディレクトリが、
スクリプトが置かれているディレクトリであることを前提にプログラムが作られていたりするのなら(そうでない場合でもいいが)、
javaコマンドを実行する前にカレントディレクトリを変更するようにスクリプトを書く。

状況が明確でないので可能性の一つというだけで役に立たないかもしれないが、
そのシェルスクリプトが存在しているディレクトリをカレントディレクトリにして、

java パッケージ名.クラス名

をコマンドラインで直接打てば動作しており、
また、そのカレントディレクトリでスクリプトを実行した場合にも実行できるが、
他のディレクトリからスクリプトを実行した場合にはクラスが見つからないというエラーになるという状況なら、
クラスパスにそのJavaクラスファイル(のトップ階層)へのパスを追加するか、
スク...続きを読む


人気Q&Aランキング