Главная

Tuesday, 5 July 2016

Выбор планировщика заданий - 5 требований.

Всем привет.

Собственно у каждого администратора есть такая необходимость - автоматизировать рутинные каждодневные операции. Для этого нужен надежный планировщик заданий. И одновременно простой. Под простотой я имею ввиду его настройку и переносимость задач (по возможности) между ПК. Так как большее время я имел с дело с серверами Windows то естественно использовал встроенный Task Scheduler. Это были задачи мониторинга за состоянием баз данных Oracle, регулярными бекапами, за безопасностью самого сервера и рабочих процессов. Очень скоро такая же необходимость возникла и для рабочих станций Windows XP/7: обновления ПО, напоминалки, другие регламентные работы. 

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

С тех пор Task Scheduler заметно вырос, и многие его недостатки были учтены. Теперь это мощный сервис с Условиями, Триггерами, Действиями и Параметрами для каждой задачи. Где также любой задаче можно просто сделать импорт-экспорт через XML-формат. Возможно через оснастку (snap-in) это не совсем удобно. Так для этого есть freeware утилита TaskSchedulerView от NirSoft где очень даже все наглядно и, как говорится,  в одном месте. Не поленитесь, запустите ее у себя, охватите взором сколько всего Windows планирует для своей работы без вашего участия.




А тогда замену пароля для рабочих станций удалось обойти с помощью отдельной утилиты "DrWeb Scheduler". Т.е. я просто нашел  замену Task Scheduler-у.


Чем хорош "DrWeb Scheduler" от известного антивирусного пакета DrWeb-a? Прежде всего тем, что он не требует для себя лицензию и состоит из одного(!) исполняемого файла. Все, запускается с правами текущего пользователя, если вы не настраиваете это по другому. Но это уже не штатная настройка "DrWeb Scheduler" а ваши финты.


Тем не менее DrWeb Scheduler имел возможность запускать задачу только при наличии сети Интернет - if you wish the task to be performed only when a connection to the Internet is established, select the Run_while_online check box. Также он мог запускать просроченные задачи немедленно - if you wish the skipped task to be performed as soon as possible, select the _Critical_ check box. Мал да удал.

Сейчас я использую nnCron с его богатющими возможностями. Он бесплатен но ... с 2009 года больше не развивается. Также имеет некоторые проблемы в работе под Win7. Хоть я и работаю с билдом 1177 от февраля 2016-го года, но кто его собрал, мне точно неизвестно. 


Во время перехода на nnCron я искал некую фичу которая могла бы мне показать(спрогнозировать) какие из заданий могут пересекаться по времени исполнения. Т.е. задача-1 еще выполняется, и задача-2, которая может использовать те же ресурсы, тоже стартует. И наступал конфликт интересов! Это стало весьма необходимо когда у нас пару раз в упаковке ночного архива БД случились временные накладки и мы остались без архива. Увы, такой "аналитикой" не обладает ни один планировщик. Максимум что я нашел так это параметр который позволяет запускать только  один экземпляр задачи.

В DrWeb Scheduler его нет, а в знаменитом nnCron это опция SingleInstance, которая предотвращает одновременное выполнение двух и более экземпляров одной задачи. Пока задача с опцией SingleInstance выполняется, ни один следующий экземпляр этой же задачи не сможет стартовать - попытка его запуска будет пресечена. Предотвратить одновременный запуск нескольких разных задач (как, впрочем, и разных экземпляров одной задачи) можно с помощью слов GET и RELEASE. GET захватывает, а RELEASE отпускает заданный семафор. В качестве параметра используется адрес переменной, который остается на стеке после употребления (выполнения) имени этой переменной. Очередные экземпляры задач будут запущены, но начнут работать только дождавшись, когда предыдущий экземпляр освободит семафор.

А для пропущенной задачи есть опция RunMissed: <hh:mm|days>. Задачи могут оказаться просроченными, не выполненными в запланированное время из-за того, что компьютер был выключен или просто не был загружен nnCron. Опция RunMissed предписывает выполнить просроченную задачу "при первой возможности", т. е. сразу после загрузки nnCron. Управление запуском просроченных задач рассмотрено более подробно в соответствующей главе. Опция RunMissed: <hh:mm|days> позволяет позволяет явным образом указывать максимальное время ожидания (в часах:минутах или днях), которое может пройти с момента запланированного, но просроченного старта задачи. Если с момента просроченного старта прошло больше времени, чем установлено пользователем, то внепланового запуска просроченной задачи не произойдет. 

В общем nnCron конечно красавчик, его возможности и преимущества перед другими планировщиками можно долго описывать. По этому поводу вам лучше заглянуть сюда: http://blogerator.ru/page/nncron-cron-windows-planirovshhik-na-steroidah-chast-1

Таким образом за время  работы у меня сформировались пять обязательных требований к планировщику.  Это запуск пропущенной задачи, запуск только одного экземпляра задачи, запуск задачи только если активен выход в Internet, запуск задачи под другими правами и
немедленный запуск задачи вручную. Последнее часто необходимо для проверки (теста) выполнения новой задачи.

Сравнительную таблицу этих фишек между DrWeb Scheduler, nnCron и Task Scheduler я свел в нижеследующую табличку.

Requirements DrWeb Scheduler nnCron Планировщик
заданий Win7
Исполняемый модуль single executable executable or service service
1.Запуск пропущенной задачи есть: Critical есть:
RunMissed: <hh:mm|days>
есть:
Свойства-Параметры
2.Запускать только
один экземпляр задачи
нет есть:
SingleInstance
есть:
Свойства-Параметры
3.Запуск задачи только если
активен выход в Internet
есть:
Run while online
есть: Condition-Online есть:
Свойства-Условия-Сеть
4.Запуск задачи под
другими правами
нет есть: Run as user есть:
Свойства-Общие
5.Немедленный запуск
задачи вручную
нет есть: Start Task есть: Действия-Выполнить


Успехов.

4 comments:

  1. В nnCron-e если задача с удалением то ее тестирование (start task) приводит к ее удалению)).

    ReplyDelete
  2. в Windows schtasks /query покажет все задания

    ReplyDelete
  3. Еще хочу чтобы шедулер показал мне дату и время первого запуска новой задачи.

    ReplyDelete
  4. nnCron бесплатен для граждан стран бывшего СССР при условии частного и некоммерческого использования. Чтобы заpегистpиpовать nnCron для частного, некоммерческого использования, пеpейдите в его домашний каталог и запустите пpогpамму tm.exe с параметром xReg:
    tm.exe xReg
    В появившемся окошке введите xUSSR регистрация в качестве имени и текущий день недели (по-pусски) вместо паpоля.

    ReplyDelete

А что вы думаете по этому поводу?