nnCron LITE и язык программирования Форт
Использование языка Форт в кронтаб-файле
Cинтаксис кронтаб-файла очень прост:
<time_in_cron_format> <command>
В качестве команды обычно используется имя исполняемого или батч-файла. Однако nnCron LITE предоставляет дополнительные возможности для тех, кто хорошо знает язык программирования SP-Forth, на котором, кстати, написан и сам nnCron LITE.
В поле команда может стоять конструкция вида:
!<любые слова форта до конца строки>
В терминологии языка Форт "слово" - это что-то вроде функции или метода в других языках программирования.
Приведу пример:
# каждую пятницу в 12:00 выводить в 'cron.out' список # форт-слов из словаря nnCron LITE 0 12 * * 5 !WORDS
Вот еще один полезный пример:
# ежедневно (с понедельника по пятницу) # завершать работу nnCron LITE в 16:45 45 16 * * 1-5 !BYE
Напоследок, покажу, как можно установить "текущий рабочий каталог" для запускаемого приложения:
# устанавливаем c:\dir в качестве текущего рабочего каталога для xxx.exe 0 * * * * !S" c:\dir" DROP APP-Dir ! S" c:\xxx.exe" START-APP
Более сложные программы на языке Форт можно подключить к nnCron LITE в качестве плагинов. Плагины подключаются в файле cron.ini с помощью специальной конструкции INCLUDE <filename>.
Вот несколько примеров:
1) Создадим плагин, который будет "следить" за тем, чтобы на экране пользователя присутствовала хотя бы одна копия калькулятора. Поместим следующий текст в файл test.spf:
\ --- начало файла test.spf --- WINAPI: FindWindowA USER32.DLL : CALC-STARTED? ( -- ? ) Z" Calculator" 0 FindWindowA 0<> ; : RUN-CALC CALC-STARTED? 0= IF ShowNormal START-APP: calc.exe THEN ; \ --- конец файла test.spf ---
В файл cron.ini добавляем строчку:
INCLUDE test.spf
Теперь мы можем поместить в файл cron.tab следующую задачу:
# раз в минуту проверять наличие "Калькулятора" # на экране и запускать очередной экземпляр, если # предыдущей копии "Калькулятора" не было обнаружено * * * * * !RUN-CALC
2) C помощью следующего плагина мы сможем запускать программу в последний день каждого месяца. Поместим следующий текст в файл lastdayofmonth.spf:
\ --- начало файла lastdayofmonth.spf --- : LAST_DAY_OF_MONTH \ проверяем: является ли текущий день последним днем месяца Year@ Mon@ MonLength Day@ = IF \ запускаем программу START-APP: c:\windows\notepad.exe THEN ; \ --- конец файла lastdayofmonth.spf ---
В файл cron.ini добавляем строчку:
INCLUDE lastdayofmonth.spf
Теперь мы можем поместить в файл cron.tab следующую задачу:
# запускаем программу в последний день каждого месяца (в 12:00) 0 12 * * * !LAST_DAY_OF_MONTH
3) Еще один плагин позволит нам периодически перезапускать программу, стартовавшую из nnCron LITE (этот плагин будет работать только, если вы используете операционную систему WinXP, поскольку в нем используется утилита командной строки taskkill, которая входит в состав этой ОС). Создаем файл killapp.spf:
\ --- начало файла killapp.spf --- VARIABLE KILLAPP_PID : KILLAPP \ прерываем работающий процесс по его PID ShowMinimized START-APP: taskkill /PID "%KILLAPP_PID @%" \ пауза в 10 секунд 10000 PAUSE \ запускаем программу снова START-APP: c:\whistler\notepad.exe \ сохраняем PID стартовавшей программы PROC-ID KILLAPP_PID ! ; \ --- конец файла killapp.spf ---
В файл cron.ini добавляем строчку:
INCLUDE killapp.spf
Теперь мы можем поместить в файл cron.tab следующую задачу:
# перезапускаем программу каждый день в 10:00 0 10 * * * !KILLAPP
4) Очередной плагин плагин позволит нам запускать приложение через "нестардантные" интервалы времени (например, каждые 1 час 50 минут). Создаем файл interval.spf:
\ --- начало файла interval.spf --- \ интервал времени (в минутах) 110 VALUE int_interval : INTERVAL FT-CUR FT>MIN int_interval MOD 0= IF \ имя и путь к программе START-APP: notepad.exe THEN ; \ --- конец файла interval.spf ---
В файл cron.ini добавляем строчку:
INCLUDE interval.spf
Теперь мы можем поместить в файл cron.tab следующую задачу:
# запускаем приложение каждые 1 час 50 минут * * * * * !INTERVAL
Использование языка Форт в командной строке (onelier'ы)
Кроме стандартной работы с ключами командной строки, nnCron LITE предоставляет пользователям любопытную возможность определять и выполнять форт-слова прямо из командной строки. Эта возможность напоминает т. н. oneliner'ы, которые характерны для языка программирования Perl. (Oneliner - это строка программного кода, которую можно выполнить из командной строки).
Правила таковы:
Примеры:
Выводим на экран тестовое сообщение:
cron.exe S" test message" MsgBox BYE
Создаем файл, пишем в него строку 'test string' и выводим текст из файла в сообщении. Разумеется, это одна длинная командная строка:
cron.exe S" oneliner.txt" FCREATE S" test string" S" oneliner.txt" FAPPEND S" oneliner.txt" FILE MsgBox BYE
Не забывайте также, что вы можете включать в oneliner'ы целые куски кода из внешних файлов (S" filename" INCLUDED).