Пару слов о выполнении Startup задач в Web/Worker ролях

Tags: azure, azure web role, azure worker role, powershell

Привет!

Недавно опять пришлось делать Startup задачи для одной из Web ролей в проекте и я хочу просто сделать пару заметок и оставить их здесь.

Обычно во всех примерах описывающих Startup задачи нам предлогают сохранять*.cmd файлы в корне проекта, но это не всегда удобно. Если у нас довольно много файлов, то корень может очень быстро превратиться в свалку. Чтобы решить эту задачу я хочу предложить создать в корне папку и назвать ее Prerequisetes. В эту папку мы положим все что нам необходимо сделать перед запуском роли. Выглядеть это будет следующим образом:

Теперь нам нужно немножко модифицировать ServiceDefinition.csdef файл. Все что нужно сделать, это поменять путь к *.cmd файлам. Теперь описание задач будет выглядеть следующим образом:

<Task
executionContext="elevated"
taskType="simple"
commandLine="Prerequisetes\ImportAzureProfile.cmd" />

Не забываем для всех файлов установить Copy always.

Следующая деталь - контекст выполнения задачи. У нас есть выбор из двух вариантов - elevated и limited. В первом случае задача будет выполнена от имени пользователя SYSTEM, а во втором - от имени NETWORK SERVICE. Иногда это может быть очень критично для выполнения задачи и тут вопрос не только в правах доступа. Например некоторые приложения могут по умолчанию писать свои логи во временную папку внутри профиля текущего пользователя. В случае с пользователем SYSTEM у нас такой номер не пройдет. Так что этот момент тоже следет принимать во внимание.

И в завершение - рабочий каталог. Если мы посмотрим на логи выполнения наших Startup задач, то увидим следующее:

(нажмите чтобы увеличить в новом окне)

Это означает например то, что все относительные пути в скрипте нужно писать от рабочего каталога, а не от каталога расположения скрипта. Другими словами - из файла ImportAzureProfile.cmd я хочу запустить на выполнение скрипт ImportAzureProfile.ps1. В моем случае файл ImportAzureProfile.cmd выглядит следующим образом:

powershell -executionpolicy bypass -file %cd%\Prerequisetes\ImportAzureProfile.cmd

На этом все. Если у вас есть вопросы по данной статье, то оставлйте их в комментариях.

No Comments

Add a Comment

Поделиться