nnCron: планировщик на стероидах. Часть 2Автор: Игорь Савчук Опубликовано: 19.10.2011 Источник: SoftKey.info 
Вчера мы весьма подробно и педантично рассмотрели возможности по скриптованию и планированию событий в nnCron. Всё-таки для цельности картины нужно пройтись по его программным составляющим - файлам. Итак, представим действующих лиц: nncron.exe - само ядро программы, здесь сосредоточена почти вся рассмотренная ранее функциональность. Отмечу лишь наличие богатства ключей, что позволяет лихо общаться с программой из черной космической бездны командной строки. Ещё один важный момент - штатная возможность работы этого планировщика в качестве системного сервиса, что особенно оценят, думаю, суровые и бородатые админы, для которых стабильность работы и ресурсоемкость запущенных на их серверах задач часто особенно критичны. nnCron после запуска болтается свернутым значком в системном трее, всегда готовый прийти вам на помощь, а также четко отслеживая ранее поставленные в очередь задания.
Вторая составляющая комплекта - файлик tm.exe. Это - графическая оболочка, как сейчас принято выражаться - фронтенд для вышеописанного nncron.exe. Для тех, кому тяжело осваивать все обилие текстов документации с описанием богатых возможностей программы, основные её возможности теперь запросто и быстренько можно настроить через эту симпатичную и интуитивно понятную окончатую оболочку. Кстати, у самого tm.exe, как и у любого серьёзного джигита, также есть собственный набор ключей для работы с ним из командной строки, так что и тут подобрать нужные консольные ключики к душе программы, при большом желании на то, получится.
И последняя составная часть комплекса - nnguard.exe. Это - элемент реализации в терминологии самой программы её "непотопляемого режима". И что это значит в наши времена глобальной нестабильности? Рассказываю: поскольку nnCron призван выполнять важные (а иногда даже критические для системы и её хозяина) задачи, в нем предусмотрено специальное средство для обеспечения её повышенной "живучести". Технически это реализовано как независимый процесс, который мониторит работу самого nnCron и который гарантированно и автоматически перезапустит nnCron в случае возникновения любой фатальной ошибки или его подвисания (попытка застраховаться от превратностей Windows и человеческой судьбы в частности).
Напоследок дадим наводку на самый главный файл, куда все кроновые и скриптовые инструкции, подробно рассмотренные нами ранее (доступные, напомню, в двух синтаксисах: классическом и расширенном), бережно записываются и перечисляются. Это так называемый кронтаб-файл, в котором хранятся все данные вами царские повеления и директивы к исполнению. В жизни это обычный текстовый файл, который может быть создан и/или отредактирован в любом подручном текстовом редакторе. Количество подключенных кронтабов не ограничено, поэтому в случае масштабных
автоматизационных действий против своей лени имеет смысл создать несколько разных кронтаб-файлов, чтобы тематически "разделить" запускаемые задачи: мне, например, удобно использовать кронтаб main.tab для повседневных задач, кронтаб backup.tab - для задач, связанных с резервным копированием, а кронтаб adv.tab - для всех задач, запускаемых по клавиатурным сокращениям и слежению за специальными папками и моей флешкой. По умолчанию программой создаётся и используется только один такой файл - nncron.tab. 
Все многочисленные настройки программы сохраняются и изменяются либо через упомянутую выше графическую оболочку, либо напрямик - в конфигурационном файле nncron.ini. Также замечу, что для операций/автоматизаций с графическими оконными объектами (для получения текущих координат мыши, выяснения класса объекта, над которым находится мышь, получения информации о координатах основного и дочернего окна и т. п.) вместе с программой поставляется в меру удобная системная утилита WinSpy. А если вдруг вы программист, то я бы посоветовал вам самостоятельно обзавестись её более мощным сторонним аналогом - WinSpy++.
Этот таинственный мистер Форт
Продолжим наше изложение с последнего озвученного мною допущения "а если вы вдруг программист". Поскольку мощь nnCron по-настоящему становится очевидной только при владении этим языком программирования, имеет смысл ну очень кратко остановиться и на нем. Фишка в том, что любая программная конструкция программы может быть как угодно "доразвита" за счет встроенной возможности интерпретировать команды языка Форт. Получается, что вы получаете не просто законченный инструмент, а лишь мощную заготовку, которую вы можете доработать в соответствии со своими запросами (о-кей, альтернативный вариант - запросами вашего работодателя).
Итак, Форт (а точнее, его отечественный диалект SP-Forth) - это язык программирования, в котором программы записываются в постфиксной записи и в стековой нотации, при этом он поддерживает механизмы метарасширения для изменения семантики и синтаксиса языка при настройке на конкретную предметную область. Синтаксис базового уровня в Форте прост и состоит из единственного правила: "Все определения разделяются пробелами". Определения Форта могут иметь любое сочетание символов, позволяя вам фактически строить свой, новый, язык на базе предыдущего языка (определений). Вот из этого слоеного теста и слеплен скриптовый язык-каркас для nnCron, оставляя за вами возможность долепить на его прочном фундаменте свою собственную "идеальную машину для автоматизации чего угодно" (или довольствоваться всем имеющимся). Именно поэтому я так и тянул, почти до конца статьи, со списком общих возможностей программы, потому что они... они бесконечны!
И самый простой вариант для такого расширения в nnCron - плагины. Это обычные текстовые файлы с расширением .spf, выполненные как дополнительные модули nnCron, также написанные на языке Форт, которые расширяют функциональность программы за cчет добавления собственных новых слов (операторов и инструкций). В дистрибутив nnCron включено больше десятка полезных (и не очень) плагинов, которые располагаются в подкаталоге plugins домашней директории nnCron.
В заключение, для всех начинающих метапрограммистов, очарованных магией языка Форт, я любезно приведу готовый ответ на первый ваш ещё невысказанный вопрос: как же вывести список всех Форт-слов, находящихся в словаре (читай - утробе) nnCron? Нет ничего проще: откройте Форт-консоль (для более традиционных программистов поясню, что это своего рода штатная дверь во внутренности программы, с которой вы, таким образом, имеете честь общаться, как локально, так и удаленно) и введите команду WORDS. Да, чуть не забыл предупредить: приготовьтесь увидеть список, состоящий примерно из трех тысяч слов. 
Для всех желающих научиться расширять nnCron: с одной стороны, предлагаю начать свой экскурс в богатый мир языка Форт с этой информативной FAQ-странички, а с другой стороны, доверительно сообщаю, что вот здесь можно скачать исходники самой программы nnCron (и в довесок традиционная плохая новость - это далеко не самая последняя её версия). Помните, Форт - очень лаконичный язык, требующий глубокого размышления и трансцендентной медитации над кодом, не загрязненной нашим суетным постиндустриальным бытием. Для пояснения этой мысли просто процитирую первую строчку из книги "Пионеры программирования" знаменитого Чарльза Мура, начинающего главу №4 про язык Форт так: "Каждый раз, когда я слышу, как кто-то похваляется написанными им миллионами строк кода, я уверен, что этот человек вопиющим образом не разобрался в своей задаче".
Гибрид планировщика, автоматизатора и скриптера...
Долго идя от частного к общему, мы наконец-то вышли к перечислению основных направлений, которые эффективно решает nnCron, и вот на что он способен:
- запускать произвольные программы (как и самого себя) как системные сервисы;
- запускать задачи "от имени" указанных юзеров;
- отслеживать и перезапускать просроченные задачи и напоминалки;
- выключать или "усыплять" компьютер в заданное время, "будить" компьютер, чтобы запустить задачу;
- отображать/скрывать/закрывать/убивать/сворачивать/разворачивать и прятать в системный трей заданные окна, добавлять в трей произвольные иконки и программы;
- менять размер и местоположение окон, а также изменять их "прозрачность";
- выводить на экран и в лог-файл любые сообщения, в том числе и запросы на выполнение указанных действий;
- работать с клипбордом, файлами и реестром;
- эмулировать клавиатурный ввод и операции с мышкой;
- звонить по модему и класть трубку;
- воспроизводить аудиофайлы и "пищать" через системный динамик;
- синхронизировать системное время;
- присваивать процессам указанный приоритет и прерывать работу любых запущенных процессов;
- автоматически перезапускаться после фатальных ошибок;
- скриптовать всё остальное, неограниченно расширяя функциональность программы, на встроенном языке, метаязыке Форт, VBScript/Jscript, и всё это с поддержкой регулярных выражений;
- nnCron способен отслеживать файлы, флаги, окна, процессы, движения мыши, время простоя компьютера, клавиатурные шорткаты, выход в онлайн/офлайн, появление диска в драйве, наличие хоста в сети (пинг), изменение удаленного ресурса по http-протоколу, количество свободного места на диске, загруженность оперативной памяти и многое-многое другое - после чего как-то автоматически обрабатывать все эти ситуации;
- для тех, кому нужна "менее навороченная" и одновременно "более легкая" версия программы, специально собрана "лайт"-версия оной, которая тщательно оптимизирована и зачищена от излишеств, где оставлено лишь самое насущное и малогабаритное.

Последние напутствия к действию
У этой программы есть два существенных недостатка. Во-первых, обилие её полезных свойств таково, что для их эффективного использования надо сначала немного подучиться, посидеть и как следует разобраться (надеюсь, эта статья хоть немного поможет в этом). Кроме замечательной документации, начать изучение программы я рекомендую с очень доступного и простого пошагового "Вводного курса для начинающих".
Во-вторых, пожалуй, самый неприятный и печальный момент - разработка программы заброшена с 2009 года. Отчасти запас прочности (в рамках её функционала), данный ей в последней существующей версии 1.93, позволяет прекрасно себя чувствовать и доныне в полностью автономном режиме, но, как и любая заброшенная вещь, программа всё же начинает морально устаревать. И главная текущая проблема в этом плане - плохая совместимость с Windows 7, для которой она никогда не тестировалась и не предназначалась. Впрочем, ряд добровольцев уже собрали свои собственные неофициальные и "подпиленные сборки" под Win7. Поэтому обладателям последней Windows я рекомендую сначала попробовать "специальные" сборки: можно от AskSoft или другую альтернативную от AlikasS (или тут). У этих обеих сборок есть свои минусы и плюсы, поэтому позволяю вам протестировать их и выбрать любимчика самостоятельно. Всем же остальным ОС-пользователям рекомендую воспользоваться официальной сборкой от nnSoft. 
В-третьих, нужно иметь в виду, что nnCron самой судьбой уготовано работать в тесной связке с родственной утилитой от этого же производителя - nnBackup (мы писали о ней ранее). Говоря кратко, она на редкость удачна и обладает во многом схожей с nnCron системой устройства. При этом даже сложно выделить целевое предназначение этих двух утилит: они одинаково удачно приживаются как на персональном компьютере, так и на серверах под управлением серверных версий Windows (доступный режим работы "как сервис" особенно подходит к последнему варианту).
И в последнюю очередь приведу немаловажную деталь: nnCron бесплатен для граждан стран бывшего СССР (при условии некоммерческого и некорпоративного его использования). Подробную информацию о бесплатной регистрации можно найти тут. |