Будет ли запускаться автозагрузка в приложении Azure?

Я создал одну задачу запуска для приложения Azure, содержащую exe-файл (запускаемый периодически с некоторым интервалом времени), и теперь я хотел бы делать его автообновлением каждую неделю, как я уже просил здесь

Тем не менее, я сделаю некоторую логику замены этого файла через этот exe-файл (задача запуска), тогда он также не получит никакого эффекта от нового файла. Я пришел к выводу, что новая задача запуска вступит в силу, только если мы обновим / создадим этот проект Azure с новым файлом. (Поправьте меня, если я понял что-то не так)

Так есть ли способ сделать мою логику работ, перезагрузив экземпляр (exe/startuptask)? Я думаю, что он также будет принимать оригинальный файл (добавленный в startuptask во время обновления / создания приложения) вместо нового файла!

Это возможно в любом случае?

2 ответа

Решение

После того, как я изучил вашу проблему, я могу предложить очень простое решение, как показано ниже, которое я делал ранее для примера Tomcat/Java:

Подготовьте свой EXE для перезагрузки виртуальной машины вместе с исходным кодом:

  1. В вашем EXE-файле создайте метод для поиска определенного XML-файла в хранилище Azure через определенный интервал, а также добавьте логику повторных попыток для доступа к XML
  2. Разбор XML для определенного значения и, если определенное значение установлено, перезагрузите компьютер
  3. Упакуйте свой EXE в формате ZIP и поместите в хранилище Azure.
  4. Обязательно разместите XML в облаке и установите значение reboot = false

Что делать в Startup Task:

  1. Создайте задачу запуска и загрузите ZIP-архив из хранилища Azure, в котором содержится ваш EXE-файл.
  2. После загрузки разархивируйте файл и поместите EXE в определенную папку
  3. запустить EXE

Что делать, если вы хотите обновить EXE:

  1. Обновите свой EXE-файл, упакуйте его в ZIP-файл и разместите в том же месте в хранилище Azure с тем же именем
  2. Обновите ваш XML, чтобы включить перезагрузку

Как будет происходить обновление:

  1. EXE будет искать XML после определенного внутреннего, как задумано
  2. Как только он увидит, что Перезагрузка установлена, он перезагрузит ВМ
  3. После перезагрузки будет запущена задача "Запуск", и ваш новый EXE-файл будет загружен на виртуальную машину Azure и обновлен. Убедитесь, что загрузка и обновление выполняются в одной папке.

Взгляните на Startup tak в приведенном ниже примере, который использует аналогичный метод: http://tomcatazure.codeplex.com/

Это очень ненадежное решение. В случае сбоя экземпляра Azure или его удаления из-за обновлений у вас будет запущен новый экземпляр из исходного пакета службы. Все состояние измененного экземпляра будет потеряно.

Гораздо более надежным способом было бы хранить изменяемый исполняемый файл где-то вроде хранилища BLOB-объектов Azure. Вы загружаете новую версию в хранилище BLOB-объектов, и роль каким-то образом видит это (либо путем опроса хранилища, либо с помощью некоторой пользовательской операции - не имеет значения), загружает новую версию и заменяет существующую версию новой.

Таким образом, если ваша роль рушится, она при запуске надежно извлекает самую новую версию из постоянного хранилища.

Другие вопросы по тегам