24. Планировщик заданий
В СУБД РЕД База Данных реализован встроенный планировщик заданий для выполнения плановых работ. Планировщик имеет возможность запускать задания по расписанию (с указанием интервалов времени и дней недели) и оповещать о запуске и завершении заданий, а также об ошибках. В качестве «задания» может выступать блок PSQL операторов или команды операционной системы.
Примечание
На данный момент планировщик заданий не работает на архитектуре Classic в Linux.
Задания сохраняются в базе данных scheduler.fdb в таблице SCH$SCHEDULED_JOBS.
Путь к базе задается в файле конфигурации scheduler.conf в параметре SchedulerDatabase.
Поле |
Тип |
Описание |
|---|---|---|
SCH$JOB_NAME |
CHAR(63) |
Имя задания |
SCH$JOB_ID |
INTEGER |
ID задания |
SCH$JOB_SOURCE |
BLOB TEXT |
Код задания в текстовом виде |
SCH$JOB_BLR |
BLOB BINARY |
Скомпилированный BLR для задания |
SCH$DESCRIPTION |
BLOB TEXT |
Содержит описание задания |
SCH$OWNER_NAME |
CHAR(63) |
Имя пользователя, создавшего задание |
SCH$JOB_INACTIVE |
SMALLINT |
Имеет два значения: 1 - задание не будет запускаться по расписанию 0 - задание будет запускаться |
SCH$JOB_TYPE |
SMALLINT |
Имеет два значения: 0 - обычное PSQL задание 1 - задание с командой ОС |
SCH$JOB_SCHEDULE |
VARBINARY(64) |
Строка в формате |
SCH$START_DATE |
TIMESTAMP |
Дата и время начала выполнения задания |
SCH$END_DATE |
TIMESTAMP |
Дата и время окончания выполнения задания |
SCH$DATABASE |
VARCHAR(255) |
Имя базы данных, для которой создано задание |
События, связанные с заданиями, регистрируются в таблице SCH$JOBS_LOG (scheduler.fdb).
Поле |
Тип |
Описание |
|---|---|---|
SCH$TIMESTAMP |
TIMESTAMP |
Время произошедшего события |
SCH$JOB_NAME |
CHAR(63) |
Имя задания |
SCH$JOB_ID |
INTEGER |
ID задания |
SCH$EVENT |
VARCHAR(32) |
Регистрируются следующие типы событий:
|
SCH$MESSAGE |
VARCHAR(1023) |
Текст ошибки |
Так как к базе данных scheduler.fdb не имеет права подключаться никто, то для всех
подключений доступны соответствующие виртуальные системные таблицы RDB$JOBS и
RDB$JOBS_LOG (аналогичные таблицам SCH$SCHEDULED_JOBS и SCH$JOBS_LOG).
В этих таблицах обычные пользователи видят информацию только о тех заданиях, которые
они создали для любой базы данных; SYSDBA видит все задания для всех баз данных.
Каждое задание выполняется в отдельном подключении от имени пользователя, который его создал.
Если необходимо прервать выполнение задания, то нужно удалить соответствующую строку из
системной таблицы MON$ATTACHMENTS. Сведения об имени выполняемого задания можно
увидеть в поле MON$CLIENT_VERSION.
Критические ошибки, при которых работа планировщика невозможна (например, отсутствие или
повреждение базы данных scheduler.fdb), записываются в firebird.log.
24.1. Создание задания
Оператор создания задания становится доступным после подключения к базе данных
с правами администратора или привилегией CREATE JOB.
Листинг 24.1 Синтаксис оператора создания задания CREATE JOB
CREATE JOB <имя_задания>
<параметры расписания>
[ACTIVE | INACTIVE]
[START DATE '<timestamp>' | NULL]
[END DATE '<timestamp>' | NULL]
{AS
<объявления переменных>
BEGIN
<блок sql-операторов>
END
| COMMAND '<команда>' }
<параметры расписания> ::= '<Минуты> <Часы> <Дни_месяца> <Месяцы> <Дни_недели>'
Имя задания должно быть уникальным среди всех баз данных.
Ключевое слово ACTIVE (по умолчанию) указывает, что задание будет запускаться по расписанию.
Ключевое слово INACTIVE означает, что задание запускаться не будет.
«Параметры расписания» задаются в виде строки в формате, аналогичном cron.
Необязательные предложения START DATE и END DATE задают промежуток времени, в котором
будет запускаться задание, в формате 'ДД.ММ.ГГГГ ЧЧ:ММ'. Указанные значения включаются в
интервал выполнения. Значение NULL используется, чтобы убрать интервал.
Предложение COMMAND дает возможность запланировать выполнение команды ОС. Такой тип заданий
может создавать только SYSDBA. Чтобы задать список программ, которые можно использовать в
команде, необходимо настроить параметр JobCommandAccess в scheduler.conf. В значении
параметра можно указывать как пути к конкретным программам, так и директории с программами.
По умолчанию разрешено использовать только программы из директории СУБД.
Задание выполняется от имени пользователя, который его создал.
24.2. Изменение задания
Синтаксис изменения задания аналогичен его созданию:
Листинг 24.2 Синтаксис оператора изменения задания ALTER JOB
ALTER JOB <имя_задания>
[<параметры расписания>]
[ACTIVE | INACTIVE]
[START DATE '<timestamp>' | NULL]
[END DATE '<timestamp>' | NULL]
[AS
<объявления переменных>
BEGIN
<блок sql-операторов>
END
| COMMAND '<команда>' ]
<параметры расписания> ::= '<Минуты> <Часы> <Дни_месяца> <Месяцы> <Дни_недели>'
Изменить задание может его создатель и SYSDBA.
24.3. Удаление задания
Оператор удаления задания доступен создателю задания и SYSDBA.
Листинг 24.3 Синтаксис оператора удаления задания DROP JOB
DROP JOB <имя_задания>;
24.4. Оповещения
Для настройки оповещений о статусе заданий создан параметр JobNotificationCommand
в scheduler.conf, в котором можно указать команду ОС. В команде можно использовать
следующие переменные со сведениями о произошедшем событии:
$(timestamp)– дата и время события;$(job_name)– имя задания;$(job_id)– ID задания;$(event)– тип события:RUN_START, RUN_FINISHилиRUN_ERROR;$(message)– сообщение с описанием ошибки.
Linux:
echo $(timestamp) $(job_name) $(job_id) $(event) $(message) >> /home/user/notifications.txt
Windows:
echo $(timestamp) $(job_name) $(job_id) $(event) $(message) >> C:\RDB\notifications.txt
24.5. Примечание для задания
Для существующего задания можно добавить комментарий, используя оператор COMMENT ON:
COMMENT ON
JOB <имя задания> IS {'<текст примечания>' | NULL};
Значение NULL удаляет существующее примечание.
Примечание
Выполнить оператор COMMENT ON JOB могут администраторы, владельцы домена или пользователи с привилегией ALTER ANY JOB.