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


159

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

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


27
Stack Exchangeのトピックはバッチプログラミングです。
ハリージョンストン

12
良い質問。+1。モデレーターはあまりにも怒っています...また別の良い答えがありますが、質問はクローズされました((
gavenkoa

代わりにこのRunAsServiceを使用します:runasservice.com。使い方はずっと簡単です。XML構成はナンセンスではありません。基本的に、これはRunAsService.exe実行可能ファイルを提供するだけで、サービスとしてコマンドライン引数でコンソールアプリケーションをラップします。これを使用して、Cygwin bashスクリプトをサービスとして実行します!!! 残念ながら、このシンプルなツールはクローズドソースのようです。
Kaz

8
「プログラマーが一般的に使用するソフトウェアツール」に基づいて再開することを推薦します。この質問に対する答えは間違いなくです。また、これは「サービスとしてのWindowsスタートバッチファイル」を検索したときの最初のGoogleの結果であることを覚えておいてください。私はここで独断主義よりも実用主義に投票します。
アダムキャメロン

回答:


151

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

nssm install "YourCoolServiceNameLabel"

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

アンインストールする

nssm remove "YourCoolServiceNameLabel"

25
+1これは聞いたことがありませんが、とてもいいです。NSSMは本当に吸いません!
Byron Whitlock 2013年

1
サービスのインストールに2分かかりました
ベンワイルド

3
@Junior Mありがとう!! あなたは私を救いました。私はこれに4時間費やしました。ありがとう!!
verystrongjoe

2
nssmポップアップデータエントリを回避するために必要なすべての引数を入力に与える方法があるかどうかを知っていますか?プロセスを自動化しようとしていますか?
両生類

1
NSSMは、GDATAアンチウイルスによって一部のお客様で削除され続けています。はい、知っています。ホワイトリストに登録します...しかし、顧客は自分にとって良いことをしません。それは悲しい真実です。
Dreamspace社長、2018

61

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


1
Win 2003サーバーで実行されているスケジュールされたタスク(コントロールパネルの[スケジュールされたタスク]に移動)を介して開始するrobocopyを介してバックアップを実行する多くのバッチファイルがあります。ワークストリート...
SAL

バックアップサービスの監視に使用したスクリプトを使用して、これを実行しました。それは魅力のように働きます。
music2myear

1
これが最高のソリューションです。サードパーティのソフトウェアは不要で、コマンドラインインターフェースも必要ありません。プラスタスクスケジューラ等のトリガー、条件、のための多くのオプションを提供
devの

3
私がこれを理解したように機能する:タスクが起動時に実行されるとき(「ユーザーがログインしているかどうかにかかわらず実行する」を使用)%UserProfile%はC:\ Users \ Default \です。 ExpectedUser \これは、他のスケジュールされたタスクで正常に動作しているように見える一部の.batファイルに不可解なエラーを作成する可能性があります。
user1754036

2
スケジュールされたタスクは信頼性が低いことで悪名高い-明らかな理由もなくタスクが時間どおりに起動しないという問題があったため、この質問に実際に遭遇した。

22

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

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

注意

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

4
Windowsはサービスとして.batファイルを実行していないようです。
パーキンス

@Perkins-鉱山は昨日いくつかのマシンで働いていた。あなたは何か特別なことを経験していますか?起動時にサービスがタイムリーに応答しないというエラーが発生しましたが、.batファイルはKibana node.jsサーバーを起動するためのものであり、エラーが発生しても正常に実行されていました。このスレッドの人は同じことを経験しているように見えましたが、nssmを使用していませんでした。stackoverflow.com/a/40130630/885535
w00ngy 2018

2
私の場合、バッチファイルが作成するはずのファイルが作成されておらず、プログラムが実行されていないため、起動していないと想定する必要があります。代わりにcmd.exe / C <batchfile>を実行するサービスを作成することで、なんとか回避できました。私はWindows 10を使用しているので、これは新しい「セキュリティ」の問題かもしれません。
パーキンス

@Perkins win10 1803で問題なく実行しました。node.jsサーバーを起動します。batファイルは、cmdまたはpowershellから呼び出されたときにファイルを作成してサービスを実行しますか?サービスを開始するときにメッセージボックスが表示されますか?サービスにそれらのディレクトリへのアクセス許可がありますか?ローカルのログファイルに書き込むことにより、バットにいくつかのエラーログを追加できます。それが機能しているかどうかを確認します。
w00ngy 2018

1
エラー1053:サービスは開始または制御要求にタイムリーに応答しませんでした。
Alex Klaus

5

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

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


3

Doug Currieが言うように、RunAsServiceを使用します。

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

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

最後のものがまだ適用されるかどうかはわかりません...それは、以前に取り組んだプロジェクトの1つの大きな悪夢でした。


3

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

私はFireDaemonを使用してJBossアプリケーションサーバー(run.bat)を起動し始めましたが、FireDaemon構成機能の豊富さにより、バッチファイルを破棄し、FireDaemonサービス定義でそのコマンドの意図を再作成できることがわかりました。

Trinityと呼ばれるSUPER FireDaemonもあり、このサービス(または技術的には任意のサービス)を管理するWindowsサーバーが多数ある場合に確認することができます。


2

Windows 2019 Serverでは、次のコマンドを使用してMinecraft Javaサーバーを実行できます。

sc create minecraft-server DisplayName = "minecraft-server" binpath = "cmd.exe /CC:\Users\Administrator\Desktop\rungui1151.lnk" type = own start = auto

.lnkファイルは、バッチファイルへの標準的なWindowsショートカットです。

--- .batファイルが始まります---

java -Xmx40960M -Xms40960M -d64 -jar minecraft_server.1.15.1.jar

--- .batファイルが終了します---

このすべての理由:

サービスはフォルダ内で開始する方法を知りません、

cmd.exeがフォルダ内で起動する方法を認識していません

サービスを開始すると「タイムリーな方法」エラーが発生しますが、ログファイルはサーバーが実行中であることを示しています。

サーバーをシャットダウンする必要がある場合は、タスクマネージャーに移動してバックグラウンドプロセスでサーバーJavaを見つけて終了するか、/ stopコマンドを使用してゲーム内からサーバーを終了するか、他のプログラム/サーバーの場合はメソッドを使用しますサーバーに関連。



1
正しく読むと、例に関連する完全な回答が含まれていることに気づくでしょう
Goofyseeker311

0

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

幸運を!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.