Как вы выполняете запланированные задачи для ваших веб-сайтов, работающих в IIS?

У меня есть веб-сайт, работающий на сервере Windows, и я хотел бы добавить несколько запланированных фоновых задач, которые выполняют различные обязанности. Например, клиент хочет, чтобы пользователи получали электронные письма с кратким описанием недавней активности на сайте.

Если бы отправка электронных писем была единственной задачей, которую нужно было выполнить, я бы, вероятно, просто настроил запланированную задачу, которая запускала бы сценарий для отправки этих писем. Однако для этого конкретного сайта клиент хотел бы, чтобы выполнялись различные запланированные задачи, некоторые из которых выполняются всегда, а некоторые - только при соблюдении определенных условий. Прямо сейчас они дали мне начальный набор вещей, которые они хотели бы реализовать, но я знаю, что в будущем их будет больше.

Мне интересно, есть ли простое решение для Windows, которое позволило бы мне определять задачи, которые необходимо было запустить, а затем иметь одну запланированную задачу, которая запускалась бы ежедневно и выполняла каждую из запланированных задач, которые были определены. Является ли командный файл самым простым способом сделать это или есть другое решение, которое я мог бы использовать?


person Matt Ephraim    schedule 20.12.2008    source источник


Ответы (5)


Чтобы упростить жизнь, я бы избегал создания одного большого монолитного исполняемого файла и разбивал работу на отдельные задачи и имел запланированную задачу Windows для каждой из них. Таким образом вы сможете легче поддерживать кодовую базу и изменять функциональность на более детальном уровне.

Позже вы можете создать службу Windows, которая динамически загружает плагины для каждой задачи по расписанию. Это может быть более пригодным для повторного использования в будущих проектах.

Но, честно говоря, если у вас крайний срок, я бы применил принцип KISS и использовал запланированную задачу для каждой задачи.

person Kev    schedule 20.12.2008
comment
Я пока только проводил мозговой штурм с клиентом, так что у меня еще нет графика. Прямо сейчас было бы легко добавить запланированную задачу для каждой из задач, которые они хотят, но если сайт станет популярным, они могут попросить целую кучу других задач. - person Matt Ephraim; 20.12.2008
comment
@Kev: Я создал объект Process и запустил schtasks с сайта. Он не работает, когда сайт находится в IIS. Что может быть причиной? - person ; 26.02.2013
comment
@AJ - сложно сказать. Почему бы не задать новый вопрос? - person Kev; 26.02.2013
comment
@Kev: stackoverflow.com/questions/15067300/ - person ; 27.02.2013

Я бы сразу выбрал службу Windows. Это будет наиболее расширяемый метод для ваших требований, создание службы не сильно увеличит ваше время разработки и, вероятно, сэкономит ваше время в будущем.

person JasonS    schedule 20.12.2008

Мы используем службу планировщика Windows, которая запускает небольшое консольное приложение, которое просто передает параметры веб-службе.

Например, если у пользователя запланированы отчеты №388 и №88, запланированная задача создается с помощью командной строки, которая выглядит следующим образом:

c: \ launcher \ app.exe отчет: 388 отчет: 88

Когда срабатывает планировщик, это приложение просто выполняет веб-метод на веб-службе, например InternalService.SendReport (int id).

Обычно у вас уже есть вся необходимая бизнес-логика, доступная в вашем веб-приложении. Такой подход позволяет использовать его с минимальными усилиями, поэтому нет необходимости создавать какой-либо сложный .exe или windows-сервис с подключаемыми модулями и т. Д.

person Oleg Yaroshevych    schedule 24.12.2008

Проблема с выполнением операций из запланированного EXE, а не изнутри веб-страницы, заключается в том, что операции могут выиграть или даже полностью потребовать ресурсов, которые будет иметь веб-страница - кеш IIS и кеш ORM - вот две вещи, которые приходят на ум. В случае ORM внесение изменений в базу данных вне контекста веб-приложения может даже оказаться фатальным. Я предпочитаю запланировать curl.exe для запроса веб-страницы с localhost.

person Ross Presser    schedule 15.07.2010
comment
Ах ... Ответ Олега об использовании exe для вызова веб-службы включает в себя лучшее из обоих миров - гибкие параметры для планирования в сочетании с фактическим заданием, выполняемым в среде IIS. Я бы оценил его, но у меня нет для этого репутации. - person Ross Presser; 21.07.2010

Используйте запланированные задачи Windows или создайте службу Windows, которая сама выполняет планирование.

person mmx    schedule 20.12.2008