2

Azure アプリケーションの 1 つのスタートアップ タスクに exe ファイル (一定の間隔で定期的に実行) が含まれています。

ただし、そのexe(スタートアップタスク)を介してそのファイルを置き換えるロジックを実行しますが、新しいファイルの影響も受けません。新しいスタートアップ タスクは、その Azure プロジェクトを新しいファイルでアップグレード/作成した場合にのみ有効になると結論付けました。(私が何か間違ったことを理解していたら、私を修正してください)

インスタンスを再起動して(exe/startuptaskで)ロジックを機能させる方法はありますか?新しいファイルではなく、元のファイル(アプリケーションのアップグレード/作成時にstartuptaskに追加されたもの)も必要になると思います!

とにかくそれは可能ですか?

4

2 に答える 2

3

これは非常に信頼性の低いソリューションです。Azure インスタンスがクラッシュしたり、更新のためにダウンしたりすると、元のサービス パッケージから新しいインスタンスが開始されます。変更されたインスタンスの状態はすべて失われます。

より信頼性の高い方法は、揮発性の実行可能ファイルを Azure Blob Storage のような場所に保存することです。新しいバージョンを Blob Storage にアップロードすると、ロールは何らかの方法でそれを確認し (ストレージをポーリングするか、ユーザーが呼び出した操作のいずれか - 問題ではありません)、新しいバージョンをダウンロードし、既存のバージョンを新しいバージョンに置き換えます。

このようにして、ロールがクラッシュした場合、起動時に永続ストレージから最新バージョンを確実にフェッチします。

于 2012-05-28T13:54:59.263 に答える
1

私があなたの問題を研究した後、私は以前にTomcat/Javaサンプルに対して行った以下のような非常に単純な解決策を提案することができます。

元のコードと一緒にVMを再起動するようにEXEを準備します

  1. EXEで、特定の間隔でAzureストレージ上の特定のXMLファイルを検索するメソッドを作成し、XMLにアクセスするための再試行ロジックも追加します
  2. 特定の値のXMLを解析し、特定の値が設定されている場合は、マシンを再起動します
  3. EXEをZIP形式でパッケージ化し、Azureストレージに配置します
  4. 必ずXMLをクラウドに配置し、reboot=false値を設定してください

スタートアップタスクで行うこと:

  1. スタートアップタスクを作成し、EXEを含むAzureストレージからZIPをダウンロードします
  2. ダウンロード後、ファイルを解凍し、EXEを特定のフォルダに配置します
  3. EXEを起動します

EXEを更新する場合の対処方法:

  1. EXEを更新し、ZIPにパッケージ化して、同じ名前でAzureStorageの同じ場所に配置します
  2. XMLを更新して再起動を有効にします

更新の方法:

  1. EXEは、設計どおりに特定の内部の後にXMLを検索します
  2. 再起動が設定されていることを確認すると、VMを再起動します
  3. 再起動後、スタートアップタスクが起動され、新しいEXEがAzure VMにダウンロードされ、更新されます。ダウンロードと更新が同じフォルダで行われていることを確認してください。

同様の方法を使用する以下のサンプルのStartuptakを見てください:http: //tomcatazure.codeplex.com/

于 2012-05-29T06:16:55.400 に答える