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).