Раздел «График выполнения»
Раздел «График выполнения» содержит описание календарных дат и моментов времени, при наступлении которых утилита lhb должна выполнить действия, описанные в сценарии.
Описание раздела
rights:
[< ежечасная операция > [< ежечасная операция > … ]]
[< ежедневная операция > [< ежедневная операция > … ]]
[< еженедельная операция > [< еженедельная операция > … ]]
[< ежемесячная операция > [< ежемесячная операция > … ]]
[< в заданное время > [< в заданное время > … ]]
Примечание
Порядок описания операций может быть произвольным.
Для всех графиков выполнения действуют следующие правила:
-
если на одно и то же время запланировано несколько событий, то инициируется более редкое событие;
-
если для определённого правила время работы не позволяет запустить другие правила, то они приостанавливаются (с последующим запуском в порядке поступления), а то правило, которое не успело вовремя отработать, игнорируется (глубина игнорирования не превышает
1
). Для этого ведется очередь отсортированных по времени выполнения операторов. Всегда выполняется первый элемент из этой очереди (при этом не важно, насколько давно прошло время его запуска – главное, чтобы момент запуска уже наступил). После выполнения оператора EVERYXXX он повторно ставится в очередь (при этом генерируется новое время запуска оператора) и т.д.
Пример
variables: NUM = 1; rights: everyweek (day=Tue,time='07:45') { NUM = NUM + 1; print ("Everyweek (200X)"); backup ("s -u " + NAME + "/" + PASSWORD + " -f "+ FILENAME + TOSTR(NUM + 2000) + ".lhb"); exception: /* Обработка ошибок оператора 'everyweek' */ print ("Error=" + TOSTR(CERROR) + ",LinError=" + TOSTR(LINERROR) + ",SysError=" + TOSTR(SYSERROR)); stop; } direct (timestamp='01.12.2016 07:45') { NUM = NUM + 1; print ("Direct (400X)"); backup ("s -u " + NAME + "/" + PASSWORD + " -f "+ FILENAME + TOSTR(NUM + 4000) + ".lhb"); exception: /* Обработка ошибок оператора 'direct' */ print ("Error=" + TOSTR(CERROR) + ",LinError=" + TOSTR(LINERROR) + ",SysError=" + TOSTR(SYSERROR)); stop; } everyday (time = '07:45') { NUM = NUM + 1; print ("Everyday (100X)"); backup ("s -u " + NAME + "/" + PASSWORD + " -f "+ FILENAME + TOSTR(NUM + 1000) + ".lhb"); exception: /* Обработка ошибок оператора 'everyday' */ print ("Error=" + TOSTR(CERROR) + ",LinError=" + TOSTR(LINERROR) + ",SysError=" + TOSTR(SYSERROR)); stop; } everyhour (min=45) { NUM = NUM + 1; print ("Everyhour (X)"); backup ("s -u " + NAME + "/" + PASSWORD + " -f "+ FILENAME + TOSTR(NUM) + ".lhb"); exception: /* Обработка ошибок оператора 'everyhour' */ print ("Error=" + TOSTR(CERROR) + ",LinError=" + TOSTR(LINERROR) + ",SysError=" + TOSTR(SYSERROR)); stop; } everymonth (date=1, time='07:45') { NUM = NUM + 1; print ("Everymonth (300X)"); backup ("s -u " + NAME + "/" + PASSWORD + " -f "+ FILENAME + TOSTR(NUM + 3000) + ".lhb"); exception: /* Обработка ошибок оператора 'everymonth' */ print ("Error=" + TOSTR(CERROR) + ",LinError=" + TOSTR(LINERROR) + ",SysError=" + TOSTR(SYSERROR)); stop; } special: before /* just after the start */ { print ("Start backup system"); } after /* after 'stop' or Ctrl-C */ { print ("Stop backup system"); if (CERROR != 0) logprint ("Error present:" + TOSTR(CERROR)); } iferr /* global */ { print ("Error=" + TOSTR(CERROR) + ",LinError=" + TOSTR(LINERROR) + ",SysError=" + TOSTR(SYSERROR)); stop; }