web-dev-qa-db-ja.com

Windowsサービスとしてバッチファイルを実行する

1つのアプリケーションを実行するには、バッチファイルを開始する必要があります(Jettyの起動、ライブログの表示などを行います)。アプリケーションは、このバッチファイルが実行されている場合にのみ機能します。そのため、このバッチファイルをWindowsサーバーからログアウトせずに実行する必要があります。

このバッチファイルをサービスとして実行できますか? 類似した質問 からの提案の1つを試しています。

136
publicRavi

NSSM は完全に無料で非常に簡単で、管理者としてコマンドプロンプト/ターミナルを実行します。

nssm install "YourCoolServiceNameLabel"

ダイアログが表示され、実行するファイルの場所を選択できます。

アンインストールする

nssm remove "YourCoolServiceNameLabel"
125
Junior M

起動時に実行するようにスケジュールされたスケジュール済みタスクとして単純に設定しないのはなぜですか?

58
Stephen Martin

これを行うための組み込みのWindowsコマンドがあります: sc create 。 nssmほど豪華ではありませんが、追加のソフトウェアをダウンロードする必要はありません。

sc create "ServiceName" start= demand displayname= "DisplayName" binpath= [path to .bat file]

注意

  • start = demandは、自分でサービスを開始する必要があることを意味します
  • =の後に空白が必要です
  • サービスがタイムリーに応答しないというエラーがサービス開始時に発生しましたが、サービスが.batを正常に実行したことは明らかでした。まだ掘り下げていませんが、この thread は同じことを経験し、nssmを使用してサービスをインストールすることで解決しました。
10
w00ngy

無料ではありませんが(39ドル)、 FireDaemon は非常にうまく機能しているので、お勧めしなければなりません。バッチファイルを実行しますが、スケジューリング、サービスの監視、GUIまたはXMLベースのサービスのインストール、依存関係、環境変数、ログ管理などの追加の非常に便利な機能を備えています。

FireDaemonを使用してJBossアプリケーションサーバーを起動し始めました(run.bat)が、FireDaemonの豊富な設定機能により、バッチファイルを作成し、FireDaemonサービス定義でコマンドの意図を再作成します。

このサービス(または技術的には任意のサービス)を管理するWindowsサーバーが多数ある場合は、Trinityと呼ばれるSUPER FireDaemonも参照してください。

3
Nicholas

ダグ・カリーが言うように、RunAsServiceを使用します。

私の過去の経験から、あなたはあなたが生成するサービスが

  • 環境変数の完全に異なるセットがあります
  • 権利/許可の問題について慎重に検査する必要がある
  • 何らかの種類の入力を求めるダイアログを開くと、混乱を引き起こす可能性があります

最後の1つがまだ当てはまるかどうかはわかりません...それは私が少し前に取り組んだプロジェクトの1つの大きな夜馬でした。

3
lexu

追加のソフトウェアは必要ありません。タスクスケジューラを使用->タスクの作成->非表示。非表示のチェックボックスは、左下隅にあります。ログイン時にトリガーするタスク(または任意の条件)を設定し、アクションタブでタスクを選択します。非表示で実行すると、タスクがサービスのようにバックグラウンドで静かに実行されます。

「ユーザーがログインしているかどうかに関係なく」実行するようにプログラムを設定する必要があることに注意してください。そうしないと、プログラムは引き続きフォアグラウンドで実行されます。

1
Zediiiii

AlwaysUp は、バッチファイルをサービスとして簡単に実行します。これはFireDaemon(上記)に似ており、無料ではありませんが、豊富な機能セットがプロフェッショナルな環境の資産になることがあります。

がんばろう!

0
CoreTech