Будет ли запускаться автозагрузка в приложении Azure?
Я создал одну задачу запуска для приложения Azure, содержащую exe-файл (запускаемый периодически с некоторым интервалом времени), и теперь я хотел бы делать его автообновлением каждую неделю, как я уже просил здесь
Тем не менее, я сделаю некоторую логику замены этого файла через этот exe-файл (задача запуска), тогда он также не получит никакого эффекта от нового файла. Я пришел к выводу, что новая задача запуска вступит в силу, только если мы обновим / создадим этот проект Azure с новым файлом. (Поправьте меня, если я понял что-то не так)
Так есть ли способ сделать мою логику работ, перезагрузив экземпляр (exe/startuptask)? Я думаю, что он также будет принимать оригинальный файл (добавленный в startuptask во время обновления / создания приложения) вместо нового файла!
Это возможно в любом случае?
2 ответа
После того, как я изучил вашу проблему, я могу предложить очень простое решение, как показано ниже, которое я делал ранее для примера Tomcat/Java:
Подготовьте свой EXE для перезагрузки виртуальной машины вместе с исходным кодом:
- В вашем EXE-файле создайте метод для поиска определенного XML-файла в хранилище Azure через определенный интервал, а также добавьте логику повторных попыток для доступа к XML
- Разбор XML для определенного значения и, если определенное значение установлено, перезагрузите компьютер
- Упакуйте свой EXE в формате ZIP и поместите в хранилище Azure.
- Обязательно разместите XML в облаке и установите значение reboot = false
Что делать в Startup Task:
- Создайте задачу запуска и загрузите ZIP-архив из хранилища Azure, в котором содержится ваш EXE-файл.
- После загрузки разархивируйте файл и поместите EXE в определенную папку
- запустить EXE
Что делать, если вы хотите обновить EXE:
- Обновите свой EXE-файл, упакуйте его в ZIP-файл и разместите в том же месте в хранилище Azure с тем же именем
- Обновите ваш XML, чтобы включить перезагрузку
Как будет происходить обновление:
- EXE будет искать XML после определенного внутреннего, как задумано
- Как только он увидит, что Перезагрузка установлена, он перезагрузит ВМ
- После перезагрузки будет запущена задача "Запуск", и ваш новый EXE-файл будет загружен на виртуальную машину Azure и обновлен. Убедитесь, что загрузка и обновление выполняются в одной папке.
Взгляните на Startup tak в приведенном ниже примере, который использует аналогичный метод: http://tomcatazure.codeplex.com/
Это очень ненадежное решение. В случае сбоя экземпляра Azure или его удаления из-за обновлений у вас будет запущен новый экземпляр из исходного пакета службы. Все состояние измененного экземпляра будет потеряно.
Гораздо более надежным способом было бы хранить изменяемый исполняемый файл где-то вроде хранилища BLOB-объектов Azure. Вы загружаете новую версию в хранилище BLOB-объектов, и роль каким-то образом видит это (либо путем опроса хранилища, либо с помощью некоторой пользовательской операции - не имеет значения), загружает новую версию и заменяет существующую версию новой.
Таким образом, если ваша роль рушится, она при запуске надежно извлекает самую новую версию из постоянного хранилища.