Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Облачные службы (классическая версия) переведены в разряд устаревших для всех клиентов с 1 сентября 2024 года. Все существующие запущенные развертывания будут остановлены и завершены корпорацией Майкрософт, и данные будут окончательно потеряны начиная с октября 2024 года. Новые развертывания должны использовать новую модель развертывания azure Resource Manager на основе Облачных служб Azure (расширенная поддержка).
С помощью задач запуска вы можете выполнять различные операции перед запуском роли. Операции, которые могут потребоваться выполнить, включают установку компонента, регистрацию компонентов объектной модели (COM), настройку разделов реестра или запуск длительного процесса.
Замечание
Задачи запуска неприменимы к виртуальным машинам, они подходят только для веб-ролей и рабочих ролей облачной службы.
Как работают задачи запуска
Задачи запуска — это действия, выполняемые перед началом ролей. Файл ServiceDefinition.csdef определяет задачи запуска с помощью элемента Task в элементе Startup. Часто задачи запуска — это пакетные файлы, но они также могут быть консольными приложениями или пакетными файлами, запускающими сценарии PowerShell.
Переменные среды передают информацию в задачу запуска, а локальное хранилище можно использовать для передачи информации из задачи запуска. Например, переменная среды может указать путь к программе, которую требуется установить, и файлы можно записать в локальное хранилище. Оттуда роли могут считывать файлы.
Задача запуска может записывать сведения и ошибки в каталог, указанный переменной среды TEMP . Во время выполнения задачи запуска переменная окружения TEMP разрешается в каталог C:\Resources\temp\[guid].[rolename]\RoleTemp при запуске в облаке.
Кроме того, задачи запуска могут выполняться несколько раз между перезагрузками. Например, задача запуска выполняется каждый раз, когда роль перезапускается, а перезапуски ролей могут не всегда включать перезагрузку. Задачи запуска следует составлять таким способом, чтобы их можно было без проблем запускать несколько раз.
Задачи запуска должны заканчиваться уровнем ошибки (или кодом выхода) равным нулю для завершения процесса запуска. Если задача запуска завершается с ненулевым уровнем ошибки, роль не удаётся запустить.
Порядок запуска роли
Ниже приведена процедура запуска роли в Azure.
Экземпляр помечается как "Запуск " и не получает трафик.
Все задачи запуска выполняются в соответствии с атрибутом taskType .
Простые задачи выполняются синхронно одновременно.
Фоновые и передние задачи запускаются асинхронно параллельно с задачей запуска.
Предупреждение
Службы IIS могут не быть полностью настроены на этапе выполнения задач запуска в процессе запуска, поэтому данные, относящиеся к роли, могут быть недоступны. Задачи запуска, требующие данных для определенных ролей, должны использовать Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart.
Процесс узла роли запускается и сайт создается в службы IIS (IIS).
Вызывается метод Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart .
Экземпляр помечается как Готов, и трафик направляется к экземпляру.
Вызывается метод Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.Run .
Пример задачи запуска
Задачи запуска определяются в файле ServiceDefinition.csdef в элементе Task . Атрибут commandLine указывает имя и параметры запускаемого пакетного файла или команды консоли, атрибут executionContext указывает уровень привилегий задачи запуска, а атрибут taskType указывает, как выполняется задача.
В этом примере переменная среды MyVersionNumber создается для задачи запуска и задает значение 1.0.0.0.0.
ServiceDefinition.csdef:
<Startup>
<Task commandLine="Startup.cmd" executionContext="limited" taskType="simple" >
<Environment>
<Variable name="MyVersionNumber" value="1.0.0.0" />
</Environment>
</Task>
</Startup>
В следующем примере пакетный файл Startup.cmd записывает строку "Текущая версия 1.0.0.0.0" в файл StartupLog.txt в каталоге, указанном переменной среды TEMP. Строка EXIT /B 0
гарантирует, что задача запуска заканчивается с кодом ошибки ноль.
ECHO The current version is %MyVersionNumber% >> "%TEMP%\StartupLog.txt" 2>&1
EXIT /B 0
Замечание
В Visual Studio свойство Copy to Output Directory для начального пакетного файла должно иметь значение Copy Always , чтобы убедиться, что пакетный файл запуска правильно развернут в проекте в Azure (approot\bin для веб-ролей и approot для рабочих ролей).
Описание атрибутов задачи
Ниже описаны атрибуты элемента Task в файле ServiceDefinition.csdef :
commandLine — задает командную строку для задачи запуска:
- Команда с необязательными параметрами командной строки, с которой начинается задача запуска.
- Часто этот атрибут является именем файла .cmd или пакетного файла .bat.
- Задача задается относительно папки "AppRoot\Bin" развертывания. Переменные среды не расширяются при определении пути и файла задачи. Если требуется расширение среды, можно создать небольшой CMD-файл сценария, который вызывает задачу запуска.
- Может быть консольным приложением или пакетным файлом, который запускает скрипт PowerShell.
executionContext — задает уровень привилегий для задачи запуска. Уровень привилегий может быть ограничен или повышен:
-
ограниченный
Задача запуска выполняется с теми же привилегиями, что и роль. Если атрибут executionContext для элемента Runtime также ограничен, используются права пользователя. -
возвышенный
Задача запуска выполняется с привилегиями администратора. Эти привилегии позволяют задачам запуска устанавливать программы, вносить изменения конфигурации IIS, выполнять изменения реестра и другие задачи уровня администратора, не увеличивая уровень привилегий самой роли.
Замечание
Уровень привилегий задачи запуска не обязательно должен совпадать с уровнем привилегий роли.
taskType — указывает способ выполнения задачи запуска.
простой
Задачи выполняются синхронно, по одному за раз, в порядке, указанном в файле ServiceDefinition.csdef . Когда одна простая задача запуска заканчивается с уровнем ошибки ноль, выполняется следующая простая задача запуска. Если больше нет простых задач запуска для выполнения, сама роль запускается.Замечание
Если простая задача завершается ненулевым уровнем ошибки, экземпляр будет заблокирован. Последующие простые задачи запуска не будут выполнены, и роль сама не будет запущена.
Чтобы пакетный файл завершился с уровнем ошибки, равным нулю, выполните команду
EXIT /B 0
в конце процесса пакетного файла.фон
Задачи выполняются асинхронно, параллельно с запуском роли.передний план
Задачи выполняются асинхронно, параллельно с запуском роли. Ключевое различие между задачей на переднем плане и фоновой задачей заключается в том, что задача на переднем плане предотвращает перезапуск или завершение работы роли, пока задача не завершится. Фоновые задачи не имеют этого ограничения.
Переменные среды
Переменные среды — это способ передачи информации в задачу запуска. Например, можно поместить путь к большому двоичному объекту, который содержит программу для установки, или номера портов, которые использует ваша роль, или параметры для управления функциями задачи запуска.
Существует два типа переменных среды для задач запуска; статические переменные среды и переменные среды на основе элементов класса RoleEnvironment . Оба находятся в разделе "Среда" файла ServiceDefinition.csdef , а также используют элемент Variable и атрибут name .
Переменные статической среды используют атрибут значения элемента Variable . В предыдущем примере создается переменная среды MyVersionNumber , которая имеет статическое значение "1.0.0.0.0". Другим примером будет создание переменной среды StagingOrProduction, которую можно вручную задать значением "staging" или "production" для выполнения различных действий запуска на основе значения переменной среды StagingOrProduction.
Переменные среды, основанные на членах класса RoleEnvironment, не используют атрибут value элемента Variable. Вместо этого дочерний элемент RoleInstanceValue с соответствующим значением атрибута XPath используется для создания переменной среды на основе определенного члена класса RoleEnvironment . Ниже приведены значения атрибута XPath для доступа к различным значениям RoleEnvironment.
Например, чтобы создать переменную среды, которая имеет значение true, когда экземпляр выполняется в эмуляторе вычислений и false при запуске в облаке, используйте следующие элементы Variable и RoleInstanceValue :
<Startup>
<Task commandLine="Startup.cmd" executionContext="limited" taskType="simple">
<Environment>
<!-- Create the environment variable that informs the startup task whether it is running
in the Compute Emulator or in the cloud. "%ComputeEmulatorRunning%"=="true" when
running in the Compute Emulator, "%ComputeEmulatorRunning%"=="false" when running
in the cloud. -->
<Variable name="ComputeEmulatorRunning">
<RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
</Environment>
</Task>
</Startup>
Дальнейшие шаги
Узнайте, как выполнять некоторые распространенные задачи запуска с облачной службой.
Упаковайте облачную службу.