Раздел «График выполнения»

Раздел «График выполнения» содержит описание календарных дат и моментов времени, при наступлении которых утилита lhb должна выполнить действия, описанные в сценарии.

Описание раздела
rights:
[< ежечасная операция > [< ежечасная операция > … ]]
[< ежедневная операция > [< ежедневная операция > … ]]
[< еженедельная операция > [< еженедельная операция > … ]]
[< ежемесячная операция > [< ежемесячная операция > … ]]
[< в заданное время > [< в заданное время > … ]]

Примечание

Порядок описания операций может быть произвольным.

Для всех графиков выполнения действуют следующие правила:

  1. если на одно и то же время запланировано несколько событий, то инициируется более редкое событие;

  2. если для определённого правила время работы не позволяет запустить другие правила, то они приостанавливаются (с последующим запуском в порядке поступления), а то правило, которое не успело вовремя отработать, игнорируется (глубина игнорирования не превышает 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;
}