[an error occurred while processing this directive]
 
vremont.by
республиканская сеть компьютерных клиник

ремонт ноутбуков в вашем городе


nnCron: планировщик на стероидах

Тема автоматизации нашей повседневной деятельности на компьютере становится с течением времени все более актуальной. Чем больше часов и дней мы проводим за своим верным помощником, тем больше рутины выявляется в этом уже обыденном взаимодействии. Но компьютер - на то он и машина, чтобы брать наиболее рутинную и бестолковую работу на себя, оставляя для человека лишь творческие задачи. Для реализации этого подхода, конечно, можно выучиться на программиста, но стоит ли “овчинка выделки”? Мы предлагаем воспользоваться уже готовым инструментом, доступным для пользователей с любым уровнем подготовки – настоящим гибридом из планировщика, универсального автоматизатора и скриптора – nnCron. При работе с ним как-то невольно приходит на ум известный афоризм: “Скоро техника дойдет до такого совершенства, что человек сможет обойтись без себя самого”.

Я думаю, многие пользователи наслышаны о мощнейшем инструменте планирования в операционных системах семействах Unix/Linux – cron. Это очень мощная и гибкая форма записи неких временных интервалов, последовательностей, закономерностей из дат, которая необходима для того, чтобы объяснить планировщику, как и когда запускать программы, скрипты, выполнять какие-то ранее запланированные действия с компьютером. Иначе говоря, cron - это удивительно гибкий для своей компактности микро-язык, который является своего рода стандартом де-факто в мире Unix. К сожалению, пока не удалось придумать какую-то другую мощную и одновременно простую систему записи правил для запуска процессов по расписанию, чем это было сделано в cron (как минимум, мне такая система не известна).
Попытки переноса этой сверхудачной системы на платформу Windows предпринимались часто и многократно, и если вы закинете свои сети в Интернет, то, вероятно, сможете извлечь оттуда неплохой список-улов подобных программ, но у всех из них присутствует следующий серьезный дефект. Мир, из которого пришел cron, – это царство командной строки и черных экранов – рабочее пространство консоли. В рамках же Windows мы, как правило, имеем дело с оконным интерфейсом, и поэтому удачно описать некую периодичность запусков самой задачи часто еще недостаточно, нужны дополнительные инструменты, с этим самым миром оконных программам как-то взаимодействующие и им манипулирующие.

Простой пример для иллюстрации этой мысли и серьезности проблемы. Принятие почты в консоли Linux сводится к запуску некоего такого же консольного клиента в заданное время с заданными ключами, пусть и с учетом каких-то сложных условий, тщательно прописанных в cron’e. В Windows же вам потребуется не только запустить вашу почтовую программу, но и как-то инициализировать процедуру ее соединения с Интернетом или запуск приема почты. Если в Linux это все делается консольными командами и ключами к соответствующим утилитам при запуске, то в Windows вам придется, скорее всего, как-то интерактивно взаимодействовать с программой. То есть нажимать какие-то графические кнопки (или вызывать горячие клавиши и т.п.), что подразумевает наличие оператора за компьютером, сводя на нет всю гибкость мощного планировщика.

Итак, самое время попытаться выделить ключевую причину успеха nnCron: если раньше для решения этих двух связанных задач нужно было наличие двух разнородных инструментов на одном компьютере (один обеспечивает функции планировщика, другой - виртуальные нажатия кнопок и взаимодействие с графическим интерфейсом требуемой программы или окнами ОС), то теперь все удобно объединено в рамках одной, тщательно продуманной программы. И что очень важно, как это удобно было сделано!

Псковский автоматизатор

Для начала мне хотелось бы хотя бы немного остановиться на личности автора программы, Николае Немцеве, хотя бы потому, что в 90-х, на пике популярности этой программы, он по праву считался одним из самых удачных “шароварщиков” бывшего Союза, бойко продающим свои nnCron (и родственную nnBackup) в страны Западной Европы и Америки. Вот как рассказывает сам автор про историю создания этой знаменитой утилиты: “Как известно, у администратора очень много всякой рутинной работы. В первую очередь, нужен планировщик. Вначале мне казалось, что системный планировщик Windows NT мне поможет, но быстро обнаружилась его ограниченность (набор временных интервалов просто никудышен). Порывшись в Интернете, я нашел несколько программ, приблизительно отвечавших моим требованиям, но при испытаниях у них тоже выявились разные недостатки. В общем, я так мучился до тех пор, пока не нашел информацию о программе cron из мира UNIX. Идея задания периодичности так понравилась, что я тут же набросал нехитрую программку, которая выполняла функции cron'а. Да, кстати, несколько клонов cron'a под Windows тоже были мною исследованы и оказались просто неработоспособными. Ограниченность языка командных файлов (CMD) постоянно заставляла изощряться, и естественным продолжением стало появление элементов скриптов в этой моей программе. Написана она была на C++, и расширение в скриптовом смысле было не самым простым делом. Тогда я полностью переписал ее на Форте (SP-Forth), и получился nnCron. Насущные проблемы заставляли добавлять в эту программу возможность за возможностью, и однажды я понял, что получается программа, которую не стыдно и людям показать”.

Не только планировщик

Итак, подытожим уже сказанное. Во-первых, нужно очень четко понять, что nnCron – это не только планировщик, хотя нужно признать, что планировщик он отменный. Во-вторых, исходя из первого пункта, нужно четко видеть его две составляющие и несущие всю конструкцию балки: это стандартный юниксовский cron с одной стороны, и мощный блок скриптования, призванный автоматизировать все и вся (и даже чуть-чуть больше), прекрасно приспособленный к особенностям GUI Windows (графическому оконному интерфейсу), – с другой. И что важно отметить на этом этапе: синтаксис скриптов позволяет использовать одновременно как язык Форт, так и собственные достаточно простые программные конструкции, которые описаны в замечательной и очень подробной документации к программе, поэтому не будем на этом останавливаться.

Итак, переходим к краткому описанию этих двух стратегических направлений программы. Начнем с cron’a и классического режима работы программы. Традиционный (унаследованный из мира UNIX) cron-формат состоит из пяти полей, разделенных пробелами. nnCron позволяет использовать т.н. "улучшенный" формат cron - расширенный до 6 значений последним полем “годы”:

<Минуты> <Часы> <Дни_месяца> <Месяцы> <Дни_недели> <Годы>

При этом общий формат описания задачи по запуску команды в классическом режиме будет иметь следующий вид (в нем левая часть - код временного крона, приведенный выше, а правая – команда для запуска целевой программы/скрипта):



Любое из шести полей в cron может содержать символ «*» в качестве универсального значения-шаблона (то есть он указывает на полный диапазон любых возможных значений для данного значения, например, каждая минута, любой час и т.д.). Далее, любое из полей может содержать список заданных значений, разделенных запятыми (например, 1,3,7), или интервал из последовательных значений, задаваемый дефисом (например, так: 1-7). После звездочки (*) или интервала с помощью символа «/» указывается шаг значений, опять же, если он нужен в конкретном случае (по умолчанию он равен /1). Таким образом, гибкая конструкция 0-6/2 может использоваться в поле «Часы» для указания того, что действие должно происходить каждые два часа, но только в течение поздней ночи и раннего утра, с 0 до 6. Давайте приведем пару полностью заполненных примеров, чтобы вы ощутили всю гибкость и мощь кроновского формата записи:

# выполнять указанное действие каждую минуту бесконечно
* * * * * *
# программа 'wget.exe' запускается каждый рабочий день в обед и после работы
00 13,18 * * 1-5 * c:\xxx\wget.exe
# запускать в каждый первый понедельник месяца в 20:00
00 20 1-5 * 1 *
# полная запись задачи в классическом формате, где указанный командный файл запускается каждые пять минут, но только по четным дням и в рабочее время
*/5 08-17 */2 * * * d:\fido\mailin.cmd

Рассмотрев классический режим работы утилиты, теперь давайте обзорно окинем взглядом те направления, которые позволяют автоматизировать блок скриптования (доступный в расширенном режиме работы, пользуясь терминологией разработчика программы):

. Выполнять уловный запуск приложений и открытие документов.
. Фоновое отслеживание событий в системе (изменение папок, открытие определенных окон и т.п.).
. Вывод сообщений, напоминаний, всплывающих подсказок.
. Набор стандартных операций для работы с окнами, файлами, процессами, звуком, системными датой и временем.
. Мониторинг и контроль производительности системы.
. Эмуляция движений мыши и ввода с клавиатуры (собственно, наиболее востребованная часть).
. Весь спектр операций с реестром.
. Поддержка регулярных выражений.
. Включение/выключение компьютера, энергосбережение.
. Дополнительное встраивание и исполнение конструкций, написанных на языках JScript и VBScript.
. Работа с удаленным доступом (RAS).
. Работа с почтовыми серверами по протоколу POP3.
. Работа с журналом событий (WinNT/2000/XP).
. Логические конструкции и ветвления для алгоритмизации сложных задач, создание массивов и вспомогательных функций.

Сразу подчеркиваю, что здесь описаны лишь основные возможности встроенного языка, то есть далеко не все.

Расширенные примеры

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

Пример 1:

#( 1_task
\ проверка почты будет запускаться каждый час или принудительно по нажатию
горячих клавиш "Alt-Ctrl+F12"; запустить почтовик, если есть новая почта
Time: 0 * * * * *
Also
WatchHotKey: @^{F12}
Rule: POP3-CHECK: "mail_hostname" "pop3_login" "your_password"
Action:
START-APP: e:\the bat!\thebat.exe /CHECKALL
)#

Пример 2:

#( 2_task
\ несложный пример синхронизации времени, демонстрирующий управляющие конструкции
OnceADay
Rule: ONLINE?
Action:
TP-SYNC: time.nist.gov
TP-SYNC-RESULT 0<>
IF
CLEAR-ONCE
MSG: "Can't synchronize time"
ELSE
TMSG: "Time was synchronized. Server response delay: %TP-SYNC-DELAY%" 10
THEN
)#

Итак, подытожим все, что мы узнали. В простейшем, классическом режиме вы задаете команды в формате одной строки, состоящей из лидирующего условия-крона и целевой команды, которая будет запущена точно в зашифрованное в cron’e время. Второй вариант описания задач обрабатывается каждый раз, когда парсер nnCron встречает, строчку начинающуюся на “#( <имя_задачи>” – после чего его сразу “перещелкивает” в расширенный режим, выполняя (или не выполняя, если cron-запись или другие условия этой задачи не истинны) задачу, заключенную в рамках конструкции обрамления отдельной задачи “#(“ и “)#”. После выхода за ее пределы – парсер снова возвращается в классический режим своей работы.

nnCron: действующие лица

Все-таки для цельности картины нужно пройтись по программным составляющим nnCron – файлам. Итак, представим действующих лиц: nncron.exe – само ядро программы, здесь сосредоточена почти вся рассмотренная ранее функциональность. Отмечу лишь наличие богатства ключей, что позволяет лихо общаться с программой из черной космической бездны командной строки. Еще один важный момент – штатная возможность работы этого планировщика в качестве системного сервиса, что особенно оценят, думаю, суровые и бородатые админы, для которых стабильность работы и ресурсоемкость запущенных на их серверах задач часто особенно критичны. nnCron после запуска болтается свернутым значком в системном трее, всегда готовый прийти вам на помощь, а также четко отслеживая ранее поставленные в очередь задания.

Вторая составляющая комплекта – файлик tm.exe. Это – графическая оболочка, как сейчас принято выражаться – фронтенд для вышеописанного nncron.exe. Для тех, кому тяжело осваивать все обилие текстов документации с описанием богатых возможностей программы, основные ее возможности теперь запросто и быстренько можно настроить через эту симпатичную и интуитивно понятную оболочку.

И последняя составная часть комплекса - nnguard.exe. Это – элемент реализации в терминологии самой программы ее “непотопляемого режима”. И что это значит в наши времена глобальной нестабильности и в преддверии тревожного 2012 года? Рассказываю: поскольку nnCron призван выполнять важные (а иногда даже критичные для системы и ее хозяина) задачи, в нем предусмотрено специальное средство для обеспечения ее повышенной "живучести". Технически это реализовано как независимый процесс, который мониторит работу самого nnCron’a, и который гарантированно и автоматически перезапустит nnCron в случае возникновения любой фатальной ошибки или его подвисания.

Напоследок дадим наводку на самый главный файл, куда все кроновские и скриптовые инструкции, подробно рассмотренные нами ранее (доступные, напомню, в двух синтаксисах: классическом и расширенном), бережно записываются и перечисляются. Это так называемый кронтаб-файл, в котором хранятся все данные вами царские повеления и директивы к исполнению. В жизни это обычный текстовый файл, который может быть создан и/или отредактирован в любом подручном текстовом редакторе. Количество подключенных кронтабов не ограничено, поэтому в случае масштабных автоматизационных действий против своей лени имеет смысл создать несколько разных кронтаб-файлов, чтобы тематически “разделить” запускаемые задачи. По умолчанию, программой создается и используется только один такой файл – nncron.tab.

Все многочисленные настройки программы сохраняются и изменяются либо через упомянутую выше графическую оболочку, либо напрямик – в конфигурационном файле nncron.ini. Также замечу, что для операций/автоматизаций с графическими оконными объектами вместе с программой поставляется в меру удобная системная утилита WinSpy. А если вдруг вы программист – то я бы посоветовал вам самостоятельно обзавестись ее более мощным сторонним аналогом – WinSpy++.

Этот таинственный мистер Форт

Продолжим наше изложение с последнего озвученного мною допущения “а если вы вдруг программист”. Поскольку мощь nnCron по-настоящему становится очевидной только при владении этим языком программирования, имеет смысл ну очень кратко остановиться и на нем. Фишка в том, что любая программная конструкция программы может быть как угодно “доразвита” за счет встроенной возможности интерпретировать команды языка Форт. Получается, что вы получаете не просто законченный инструмент, а лишь мощную заготовку, которую вы можете доработать в соответствии со своими запросами (о’кей, альтернативный вариант окончания предложения - запросами вашего работодателя).

Итак, Форт (а точнее, его отечественный диалект SP-Forth, spf.sourceforge.net) — это язык программирования, в котором программы записываются в постфиксной записи и в стековой нотации, при этом он поддерживает механизмы метарасширения для изменения семантики и синтаксиса языка при настройке на конкретную предметную область. Синтаксис базового уровня в Форте прост и состоит из единственного правила: «все определения разделяются пробелами». Определения Форта могут иметь любое сочетание символов, позволяя вам фактически строить свой, новый язык на базе предыдущего языка (определений). Вот из этого слоеного теста и слеплен скриптовый язык-каркас для nnCron, оставляя за вами возможность долепить на его прочном фундаменте свою собственную “идеальную машину для автоматизации чего угодно” (или довольствоваться всем имеющимся). Именно поэтому я так и тянул со списком общих возможностей программы, потому что они… они бесконечны!

И самый простой вариант для такого расширения в nnCron – плагины. Это обычные текстовые файлы с расширением .spf, выполненные как дополнительные модули nnCron, также написанные на языке Форт, которые расширяют функциональность программы за счет добавления собственных новых слов (операторов и инструкций). В дистрибутив nnCron включено больше десятка полезных (и не очень) плагинов, которые располагаются в подкаталоге plugins домашней директории nnCron.

Для всех желающих научиться расширять nnCron предлагаю начать свой экскурс в богатый мир языка Форт с этой информативной FAQ-странички (www.nncron.ru/help/RU/add_info/forth_faq.htm). Помните, Форт - очень лаконичный язык, требующий глубокого размышления и трансцендентной медитации над кодом, не загрязненной нашим суетным постиндустриальным бытием. Для пояснения этой мысли просто процитирую первую строчку из книги “Пионеры программирования” знаменитого Чарльза Мура, начинающего главу №4 про язык Форт так: “Каждый раз, когда я слышу, как кто-то похваляется написанными им миллионами строк кода, я уверен, что этот человек вопиющим образом не разобрался в своей задаче”.

Последние напутствия к действию

У этой программы есть два существенных недостатка. Во-первых, обилие ее полезных свойств таково, что для их эффективного использования надо сначала немного подучиться, посидеть и как следует разобраться (надеюсь, эта статья хоть немного поможет в этом). Кроме замечательной документации, начать изучение программы я рекомендую с очень доступного и простого пошагового “Вводного курса для начинающих” (www.nncron.ru/help/RU/steps/step_about.htm).

Во-вторых, пожалуй, самый неприятный и печальный момент – разработка программы заброшена с 2009 года. И главная текущая проблема в этом плане – плохая совместимость с Windows 7, для которой она никогда не тестировалась и не предназначалась. Впрочем, ряд добровольцев уже собрали свои собственные, неофициальные и “подпиленные сборки” под Win7. Поэтому обладателям последней Windows я рекомендую сначала попробовать “специальные” сборки: можно от AskSoft (asksoft.net/Download/nnCron.exe) или другую альтернативную - от AlikasS (tempfile.ru/file/1860648 или тут bit.ly/qWTQq6). Всем же остальным ОС-пользователям рекомендую воспользоваться официальной сборкой от nnSoft: www.nncron.ru/download.shtml. В-третьих, нужно иметь в виду, что nnCron самой судьбой уготовано работать в тесной связке с родственной утилитой от этого же производителя – nnBackup (мы писали о ней ранее). Говоря кратко, она на редкость удачна и обладает во многом схожей с nnCron системой устройства.

И, в последнюю очередь, приведу немаловажную деталь: nnCron бесплатен для граждан стран бывшего СССР (при условии некоммерческого и некорпоративного его использования). Подробную информацию о бесплатной регистрации можно найти тут: nncron.ru/help/RU/about/registration.htm#free.

Игорь Савчук Softkey.info

© Компьютерная газета :: главная страница