終了時にアプリケーションを自動的に再起動します


10

コンピューターが実行されているときはいつでも実行したいサーバーアプリケーションがありますが、通常はこれが当てはまります。

アプリケーションを監視し、アプリケーションが終了した場合に再起動するために実行できるバットまたはスクリプトはありますか?


どのような種類のアプリケーションで、通常はどのように起動しますか?サービスとして、レジストリで実行コマンドとして、またはスタートアップフォルダーで?
KCotreau

レジストリ実行コマンド。オプション '-start'を使用します。
2010

アプリがすでに実行されている状態でそのコマンドを再度実行すると、現在どうなりますか?
KCotreau、2011

何も。コマンドは、アプリケーションがすでに実行されていることを認識します。
シド

回答:


12

これは常に機能するとは限りません(プログラムのロード方法に依存します)が、通常は次のようなバッチファイルを作成できます。

@Echo off
:Start
NotePad
echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log 
echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost

goto Start

例としてメモ帳を使用しました。

台詞

echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost

プロセスが再び起動する前にプロセスを中止する機会をユーザーに与えるための(10秒の)遅延です。

この線

echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log 

は必要ありませんが、プログラムがファイルに閉じられるたびにログに記録されるため、問題を診断するのに役立つ場合があります。ErrorLevelはあまり知らないかもしれませんが、プログラムが正常に閉じた場合は0を返し、ない場合はゼロのメッセージ

注:既に実行されている場合、プログラムは何も実行しないと述べました。これは通常、アプリケーションが起動し、別のコピーがすでに実行されていることを検出して、すぐにシャットダウンすることを意味します。その場合、このバッチファイルを開始する前にプログラムが実行されていると、バッチはループして10秒ごとにプログラムを開始しようとします。


「その後、バッチはループし、10秒ごとにプログラムを開始しようとします。」これは悪いことですか?
posfan12

ありがとう!! 午前12時52分に小さなコピーと貼り付けを行うと、午前中に見つけられる(または見つけられない)ことを心配することなく(あまりにも)寝ることができます。ええと。睡眠後の朝。
Spike0xff 2017年

2

上記の回答に基づいて、私が提案するのは、そのコマンドをバッチファイルに入れ、そのバッチファイルを毎分スケジュールされたタスクとして実行するように設定することです。これに関連するオーバーヘッドは事実上なく、プロセスが停止したことに気づいているかどうかに関係なく、プロセスが明示されます。


これは、迅速ではありますが、かなり不器用で非効率的なソリューションとして私を襲います。同じ目的のためにおそらくより適切な手段はありますか?ご協力いただきありがとうございます!!!
シド

シド、私が言ったように、オーバーヘッドは非常に最小限であり、それを行うのは簡単です。それが実行されているかどうかを確認するために何かをコーディングし、それを再起動する方法を考えたい場合は、遠慮なく行ってください。これは、通常はサーバー上にある、実行を停止するアプリケーションがある場合に使用される一般的な方法です。
KCotreau、2011

はるかに簡単な方法です。そして、オーバーヘッドはありません。
surfasb 2013

2

この質問への正しい答えは、なぜあなたがそれをしたいのによります。偶発的なシャットダウンを解決しようとしていますか?マシンのユーザー(例:監視ソフトウェアを閉じる従業員)による「悪意のある」シャットダウンを偶然に防止しますか?深刻で巧妙な悪意のある攻撃を防ぎますか?マルウェアを自分で作成しようとしていますか(その場合は、削除してください;-))?

また、他のコメンターが述べたように、Windowsサービスを作成した場合(たとえば)

個人的には、2番目のアプリケーションを作成して、同じ方法で起動することから始めます。持っている両方のアプリケーションがスキャン互いに必要に応じて定期的に再起動-あなたが合法的にかかわらず、クローズするアプリケーションのための簡単な方法を提供します!

とはいえ、「時々私はそれ自体が閉じていると思うことがある」というコメントがあれば、私は実際にそれが閉じている理由を見つけることから始めます...


私はコンピューターをメディアサーバーとして使用しており、問題のアプリケーションはmediaserver.exeです。それについて悪意のあることは何もありません。アプリケーションを閉じたいシナリオは予測できませんが、閉じたとしても、最初にスクリプトまたはbatを停止できなかった理由はありません。また、私はソフトウェアを書くことはできませんが、batファイルに精通しています。つまり、私は初心者です。
シド

謝罪-それは私が「プログラマー」グループに属していて、あなたが自分でアプリを書いたと思います:-)不器用そうですね、@ KCotreauによって記述された「スケジュールされたタスク」のアプローチ
Steve Mallam

2

ReStartMe 2.0 [ Mirror ] と呼ばれるプログラムを使用すると、まさに次のようになります。

プロセスを監視し、プロセスが閉じた場合は再起動します。


-1

これはずっと良いです!これは私がminetestゲームサーバーに使用しているいくつかのコードで、.batファイルに保存する必要があります

@echo off
rem This is a comment line
rem This one is a comment too
rem Following line ensures the working directory is searched in C:
C:
rem Join the correct directory, where the server stuff lies in:
cd "C:\Users\morenavaj\Documents\minetest-0.4.16-win64 - Lone_Wolf\"
:love_spaghetti_code
bin\server.lnk --config minetest.conf ^
            --worldname "Land of Blockheads" ^
            --gameid minetest_game ^
            --port 30000 ^
            --logfile bin/debug.txt

echo Restarting server....
goto love_spaghetti_code

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