web-dev-qa-db-ja.com

実行可能ファイルが常に実行されていることを確認しますか?

Windows Server 2008R2を実行しているvpsがあります。

常に実行する必要のある実行可能ファイルがあります。ログインしていなくても。

問題があり、サーバーが予期せず再起動した場合、サーバーを起動するためにログインする必要はありません。これを行う方法はありますか?

さらに、これができるとは思いませんが、アプリケーションがクラッシュした場合、クラッシュした実行可能ファイルをOSに閉じて再起動させる方法はありますか?

さらに、私が管理者としてログインするとき、それが実行されているのを見ることができれば、それも素晴らしいでしょう。 (wg:表示されるコンソールウィンドウ)

ありがとう

4
jmasterx

これはyourゲームであり、コードを所有していることを意味するため、Windowsサービスとして書き直す必要があることを意味します。サーバーはサービスを実行するように作られています。 Windowsサービスは、ログオンしているかどうかに関係なく、ユーザーの操作なしで実行するように設計されており、マシンの起動時に自動的に開始できます。 (サービスを自動に設定するだけで、OSがロードされた直後に開始されます。)さらに、サービスコントローラーで高度な回復オプションを定義して、クラッシュした場合にWindowsにサービスを自動的に再起動させたり、電子メールを送信したりすることもできます。あなたがそんなに傾いたならあなたのサービスがクラッシュしたことをあなたに通知します。

Recovery Options

Windowsサービスと直接対話することはありません。 Windowsサービスにはユーザーインターフェイスがなく、デスクトップにウィンドウを作成しません。 (すべきではありません。)ログオンしたときにコンソールウィンドウは表示されません。ただし、サービスとインターフェイスできるseparateアプリケーションを作成して、ユーザーがサービスの設定を構成したり、管理機能を実行したりできるようにすることができます。管理アプリケーションは、サービスが使用するレジストリエントリや構成ファイルの設定などを設定および読み取るために使用される場合があります。

基本的に、私が今説明したこと以外にあなたがすることは、それを間違って行うこと(TM)、私見です。

しかし、完全を期すために、間違った方法をいくつか調べてみましょう。それでも、技術的には必要なことを達成できます。

問題があり、サーバーが予期せず再起動した場合、サーバーを起動するためにログインする必要はありません。これを行う方法はありますか?

承知しました。 実行可能ファイルをHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Runに入れて、起動時に実行します。 (ユーザーログインについては申し訳ありません。)または、システムの起動時に実行するように構成されているスケジュールされたタスクに配置します。 (もちろん、Windowsサービスルートを使用する場合は、サービスコントローラーでサービスを自動に設定するだけです。)

アプリケーションがクラッシュしたと言って、OSにクラッシュした実行可能ファイルを閉じて再起動させる方法はありますか?

これは意味がありません。プロセスがまだ実行中の場合、クラッシュしませんでした。コードで間違ったこと(例外処理の欠如など)が原因でhungになった場合、それはコードで修正する必要があるものです。 。

一方、FunGame.exeが実行されているかどうかを確認するスクリプトを(タスクスケジューラを介して)5分ごとに実行し、実行されていない場合は開始する場合は、自由に実行できます。だから...私のサーバーの1つでそのようなことを実行した場合は嫌いですが。

さらに、私が管理者としてログインするとき、それが実行されているのを見ることができれば、それも素晴らしいでしょう。 (wg:表示されるコンソールウィンドウ)

起こらない-あなたがあなたのサービスへの管理/監視インターフェースとして特別に設計された別のアプリケーションを作ることについて私のアドバイスを受け取らない限り、あなたはそのアプリケーションを管理者のスタートアップフォルダなどに貼り付けることができます。

最後にもう1つ...srvany.exeもあります...古くてサポートされていませんが、独自のサービスを作成しない場合は、汎用サービスホストとして調べることをお勧めします。

9
Ryan Ries

コンソールウィンドウについて言及したので、アプリケーションはコマンドラインアプリケーションであると想定しています。

その場合は、次のようにバッチファイルから起動できます。

:top
the_game_server.exe
goto top

理論的にも機能するコマンドラインアプリケーションでなくても、私は推測します。

クラッシュを乗り切るためにアプリケーションを取得するのはもっと難しいかもしれません。クラッシュしたときに何が起こるかによって異なります。たとえば、ウィンドウがモーダルダイアログをポップアップして、アプリケーションがランタイムに異常な方法などで中止するように指示したことを通知する場合があります。ダイアログボタンをクリックする方法が必要な場合は、AutoHotkeyがおそらく良い選択です。

これは、サービスを作成するほど洗練されたソリューションではありません。これは、アプリケーションソースが利用できない場合に私が行うことの多くであり、それを機能させる必要がありました。

1
tfinniga