5

Azure Virtual Machine でノード アプリケーションを実行していますが、Azure Automation を使用して (または管理ポータルを介して) 特定の時間に VM を再起動したいと考えています。

しかし、VM の再起動後にノード アプリケーションを再起動するにはどうすればよいでしょうか。

これを実現するために、タスク スケジューラの追加、レジストリ キーへのコマンドの追加 ( LocalMachine\..\Run)、VM 用のカスタム スクリプト拡張機能の使用など、さまざまな方法を試しました。

上記のすべてが失敗しました。必要なのは、VM の再起動後、ノード アプリケーションを自動的に起動できるようにすることです。次に、定義済みのアカウントを使用して VM にリモート接続すると、上記の方法のいくつかが機能します。ただし、これはシーナリーではありません。すべての再起動ではなく、最初に 1 回だけリモートしたいだけです。

では、手動でログインせずに VM が自動的に再起動した後にプロセスを開始したり、コマンドを実行したりするために、これを実現する正しい方法は何でしょうか?

4

1 に答える 1

3

この目標を達成するために、私はすでに多くの方法を試してきましたが、私の観点からは、タスク スケジューラはこの種の仕事を行うための最良の選択です。

重要な点は、プロセスの開始後に Windows コマンド プロンプトが存在しないようにすることです。たとえば、最初は、ノード アプリケーションを起動するために、 foreverを使用します。forever コマンドはすぐに戻るので、すべてのコマンドの実行が終了したことになります。したがって、Windows コマンド プロンプト プロセスはノード プロセスと共に強制終了されます。

私たちが行ったことは、コードで使用されている、永遠に起動する別の方法 ( forever-monitor ) を使用することです。これを行うことで、nodeコマンドを使用してこの永久スタートアップ ファイルを開始することができます。コマンドはコマンド プロンプトをブロックするためnode、ノード アプリケーションは強制終了されません。


もう 1 つの方法は、Azure Automationを使用してリモートで起動スクリプトを実行することです。

完全なスクリプトはここにあります。重要なポイントは次のとおりです。

$PSCommandResult = Invoke-command -AsJob -ConnectionUri $Using:Uri.AbsoluteUri -credential $Using:mycreds -ScriptBlock { Invoke-Expression "D:\start.ps1" }

スクリプトでは、コマンドをstart.ps1使用して実行を終了することもできません。Start-Sleepスクリプトは次のいずれかです。

forever start --sourceDir D: start.js
Start-Sleep -s 86400

この 2 つのアプローチが役立つことを願っています。

于 2015-06-04T08:02:09.190 に答える