Windows TIPS
[System Environment]
  Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

Javaアプリケーションをログオフ中も実行させ続けるには

解説をスキップして操作方法を読む

海津 智宏
2006/01/07
 
対象OS
Windows 2000
Windows XP
Windows Server 2003
プログラムをバックグラウンドで実行させ続けるためには、Windows OSのタスク機能が利用できる。
だがJavaアプリケーションをタスクとして登録しても、ユーザーがログオフすると、Javaアプリケーションが終了してしまう。
これを避けるには、javawコマンドにログオフのイベントを無視するオプションを付けるとよい。
 
解説

 Javaアプリケーションを、Windowsのサービスのように利用する(バックグラウンドでずっと実行させ続ける)ためには、通常のWindowsアプリケーションとは違った配慮が必要である。一般的には、Windowsのタスクとして登録しておけば、ユーザーのログオン/ログオフとは関係なく、プログラムを実行させ続けることができるはずである。だがJavaの実行環境の仕様により、たとえタスクとして登録されたプログラムであっても、ユーザーがログオフすると実行中のJavaアプリケーションのタスクが終了してしまう。これはJavaの実行環境が、ログオフに起因するシグナルをキャッチしてシャットダウンしてしまうからだ。

 Javaアプリケーションをログオン/ログオフとは無関係に、ずっと実行し続けたければ、このようなシグナルを無視するオプションを指定するとよい。Java実行環境1.3以降には「-Xrs」というオプションがあり、このオプションを付けて実行すると、ログオフ時のWindows OSによるシグナルを無視して実行を続けることができる。


操作方法

 例えば、次のようなJavaプログラムを作成したとしよう。

※ファイル:Count.java

public class Count {
  public static void main(String[] args) throws Exception{
    for (int i=0; ; i++){
      Thread.sleep(1000);
      java.io.FileWriter fw = new java.io.FileWriter("count.txt");
      fw.write(Integer.toString(i));
      fw.close();
    }
  }
}

 これは、起動からの経過時間をファイルに出力するプログラムである。実行中は1秒ごとにカレント・ディレクトリの「count.txt」が更新される。このファイルが更新されるかどうかを確認することで、プログラムが実行中かどうかを簡単にチェックできる。

 これをコンパイルし、「java Count」として実行すると、「count.txt」が作成され、1秒ごとに経過時間が書き込まれる。コマンド・プロンプトで「Ctrl+C」を押すか、ログオフするとプログラムは終了する。

 では、これをログオフ中も実行させるために、タスクとして登録してみよう。こうすると、ログオン/ログオフとは関係なく、実行されるようになる。

 まず、コントロール・パネルの[タスク]アイテムを開き、右クリックして表示されるポップアップ・メニュー、もしくは[ファイル]メニューの[新規]−[タスク]を選択する(コントロール・パネルをカテゴリ表示にしている場合には、[パフォーマンスとメンテナンス]の[タスク]アイテムを開く)。作成された新しいタスクに名前を付け、プロパティを開く。[実行するファイル名]は「javaw -Xrs Count」というふうに、-Xrsオプションを付けておく。その下の「開始」テキストボックスにはJavaプログラムを作成したフォルダ名を入力する。

タスクのプロパティ
実行プログラムの指定、実行プログラムが存在するフォルダの指定、プログラムを実行するアカウントの指定を行う。
  “-Xrs”オプションと実行するプログラム名を指定して、javawコマンドを指定する。
  実行したいプログラムが存在するフォルダを指定する。
  プログラムを実行するアカウントを指定する。

 次に[スケジュール]タブをクリックし、タスクのスケジュールを「システム起動時」とする。

[スケジュール]タブ
[スケジュール]タブをクリックし、タスクのスケジューリング方法を指定する。
  「システム起動時」を選択する。

 以上の設定でタスクを登録し、コンピュータを再起動すると自動的にJavaが起動され、ユーザーがログオン/ログオフしても実行が続けられる(-Xrsオプションがないと、ユーザーがログオフすると、プルグラムが終了してしまう)。終了するには[タスクの終了]を実行すればよい。

 なお、「-X」で始まるオプションは非標準であり、バージョンアップに伴って変更される可能性がある。利用の際には、あらかじめ「java -X」などでXオプションが利用できることを確認していただきたい。End of Article

「Windows TIPS」


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間