Насколько надежен планировщик задач Windows для планирования повторного запуска кода?
-
05-09-2019 - |
Вопрос
У меня есть немного кода, который должен располагаться на компьютере с Windows server 2003 и запускаться каждую минуту.
Каков рекомендуемый способ справиться с этим?Можно ли спроектировать его как консольный сервис и просто включить планировщик задач в любую минуту?(это вообще возможно?) Должен ли я просто смириться с этим и записать это как службу Windows?
Решение
Поскольку он должен запускаться каждую минуту, я бы предложил написать службу Windows.Это не очень сложно, и если вы никогда не делали этого раньше, вам было бы здорово узнать, как это делается.
Вызывать запланированную задачу каждую минуту - это не то, что я бы рекомендовал.
Другие советы
Я бы сказал, смиритесь с этим и напишите это как службу Windows.Я не считаю запланированные задачи очень надежными, и когда они не выполняются, мне еще предстоит найти простой способ выяснить, почему этого не произошло.
Запланированные задачи Windows достаточно надежны для наших целей, и мы предпочитаем их почти во всех случаях службам Windows из-за их простоты установки и расширенных функций восстановления.Постоянный характер службы Windows может в конечном итоге стать проблемой, если часть написанного кода окажется заблокированной или зацикленной на фрагменте кода, в котором ее не должно быть.Обычно мы пишем наш код примерно таким образом
Init();
Run();
CleanUp();
Затем, как часть Запланированной задачи, мы устанавливаем ограничение по времени на то, как долго может выполняться процесс, и заставляем его завершить процесс, если он выполняется дольше.Если у нас действительно есть фрагмент кода, у которого возникают проблемы, запланированные задачи уничтожат его, и процесс запустится в следующую минуту.
если вам нужно, чтобы он запускался каждую минуту, я бы создал его как службу Windows.Я бы не стал использовать планировщик ни для чего меньшего, чем ежедневная задача.
Я бы сказал, что это зависит от того, что он делал, но в целом я всегда за то, чтобы было как можно меньше слоев.Если вы пишете это как консольный сервис и используете планировщик задач, то у вас есть два места для дальнейшего обслуживания.
Если вы запишете его как службу Windows, то у вас будет всего на одно меньше мест для проверки на случай, если что-то пойдет не так.
Во время поиска запланированной сервисной справки я наткнулся на очень хороший статья Джона Гэллоуэя.
Существуют различные преимущества, если служба Windows используется для запланированной задачи.Я согласился с этим.Я бы предложил использовать задачу по расписанию, простую в реализации.Пожалуйста, обратитесь к подробная информация о внедрении планировщика задач.Надеюсь, эта информация поможет в доработке подхода к внедрению.
Единственный другой момент, который следует учитывать, это то, что если ваша работа связана с каким-либо взаимодействием с базой данных, рассмотрите возможность изучения служб интеграции / планирования, предоставляемых вашей базой данных.
Например, создание пакета SSIS для вашей службы, связанной с SQL Server, может показаться немного излишним, но он может быть хорошо интегрирован со средой и уже будет иметь свои собственные механизмы ведения журнала / проверки ошибок.
Я согласен, это своего рода пустая трата усилий - создавать даже консольный исполняемый файл и планировать его запуск каждую минуту.Я бы предложил изучить что-то вроде Quartz.Net.Таким образом, вы можете создать простое задание и запланировать его выполнение каждую минуту.