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

Привет!

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

(статья является копией моей публикации в личном блоге)

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

01

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

<Task
executionContext=»elevated»
taskType=»simple»
commandLine=»PrerequisetesImportAzureProfile.cmd» />

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

02

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

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

03

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

powershell
-executionpolicy bypass
-file %cd%PrerequisetesImportAzureProfile.cmd

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

Pin It

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.