При работе система ведет два файла журнала – короткий и полный. Формат короткого журнала (задается параметром short_log_file в файле конфигурации) фиксирован. При развитии системы его формат может меняться только путем добавления новых событий, но не изменением формата старых.
Второй файл (задается параметром log_file в файле конфигурации) служит для целей отладки и исправления нештатных ситуаций. Его формат меняется от версии к версии. Ниже будет приведен его сокращенный формат, который не меняется либо меняется незначительно. Строки, не указанные здесь можно опускать при чтении файла журнала.
[дата] имя_очереди :УРОВЕНЬ сообщение.
[дата] приводится в формате команды date (Mon Jan 1 01:02:03 0001). УРОВЕНЬ – уровень важности сообщения, один из INFO, WARN, ERROR, DEBUG, DEBUG2. В коротком журнале это поле отсутствует.
[Fri Jun 1 12:51:05 2001] main :INFO VIEW request danila; long
Ниже приводится список сообщений в коротком файле журнала:
Строка (строки в журнале)
|
Событие в системе
|
VIEW request user; queue
|
Запрос пользователя user на просмотр состояния очереди queue
|
ADD request user; queue; NP; task_with_args
|
Запрос пользователя user на постановку в очередь queue задания с аргументами task_with_args и заказом для него NP процессоров
|
DEL request user; queue; N
|
Запрос пользователя user на удаление задачи с номером N из очереди queue
|
PRI request user; queue; N; P
|
Запрос пользователя user на измерение приоритета задачи с номером N в очереди queue на P
|
MODE request user; queue; SET; CLEAN
|
Запрос пользователя user на изменение (просмотр) режима работы сервера. SET и CLEAN являются суммами флагов, которые требуется установить и сбросить соответственно. Значения флагов приведены в графе 'числ. знач.' в главе "режимы команды mode"
|
BLOCK request user; queue; N; block
|
Запрос пользователя user на блокировку/ разблокировку задачи с номером N в очереди queue. Если параметр block равен 1, то запрос на блокировку, если 0 – то на разблокировку
|
BLOCK_PE request user; pe; block
|
Запрос пользователя user на блокировку/ разблокировку процессора pe. Если параметр block равен 1, то запрос на блокировку, если 0 – то на разблокировку
|
STAT request user; queue
|
Запрос пользователя user на получение состояния очереди queue
|
Server killed by signal SIGNAL
|
Завершение работы очереди по сигналу SIGNAL (вместо SIGNAL может быть [master died], что означает завершение работы вследствие завершения родительской очереди)
|
RUN id; user; NP; task_with_args
|
Запуск задачи с номером id пользователя user на NP процессорах. task_with_args – сама задача с аргументами
|
END_TASK0 id
|
Завершение задачи с номером id
|
END_TASK id; user; status; signal; hours:min:sec
|
Завершение задачи с номером id пользователя user с кодом завершения status по сигналу signal. Время работы задачи – в последнем аргументе
|
END_TASK_NODES id; node1:1,node1:2,…,
nodeN:X
|
Завершение задачи с номером id. Далее перечисляются все процессоры, на которых она считалась
|
При завершении задачи в журнал попадают все три строки END_TASK*.
Как уже говорилось, в полный файл журнала попадает в основном отладочная информация, которая может быть полезной при разрешении нештатных ситуаций.
Ниже приводятся список возможных сообщений в журнале. Строки, не описанные здесь следует игнорировать при чтении журнала.
Строка (строки в журнале)
|
Событие в системе
|
Start new server. Port PPPP, N processors
|
Старт новой очереди (не только сервера)
PPPP – номер серверного порта (актуален только для головной очереди), N – число обслуживаемых процессоров
|
PE_LIST [node1:1,…,nodeX:Y]
|
Список процессоров, обслуживаемых очередью
|
DUMP
|
Сохранение текущего состояния очереди в файле состояния
|
DUMP DONE
|
Завершение сохранения текущего состояния
|
Got '…'
|
Получена команда от клиента
|
GOT: …
|
Параметр полученной команды
|
SEND TO CHILDS
|
Рассылка запросов к дочерним очередям
|
MESSAGES FROM CHILDS
|
Приход сообщений от дочерних очередей
|
Message from queue1 to queue2 (…)
|
Получено сообщение от очереди queue1 к queue2 (возможно транзитное)
За этой строкой могут появиться строки без ведущей даты, если они являются частью сообщения.
|
Forwarding to 'queue'
|
Транзит сообщения к очереди queue
|
SCEDULE
|
Запуск планировщика задач
|
Can_run: id=XXX own=XX shared=X req=X res=X
|
Задача выбрана планировщиком для запуска. id – идентификатор, own – сколько "своих" процессоров свободно, shared – сколько "разделяемых" процессоров свободно, req – сколько процессоров запрошено, res – сколько процессоров "зарезервировано"
|
FREE: …
|
список свободных процессоров
|
SHUFFLE USE …
|
Запрос к модулю стратегии распределения процессоров.
|
USED:
|
Список использованных процессоров
|
Try to exec '…', using outfile='…'
|
Попытка выполнить строку, как старт задания. Указан шаблон файла стандартного вывода. Далее идет строка, в которой дата заменена на многоточия. В ней сообщается шаблон имен файла отчета и временного каталог для задачи
|
REAL outfile='…' repfile='…' tmp='…'
|
Имена файлов стандартного вывода и отчета, а также временный каталог для последней запускаемой задачи (с подставленными псевдопеременными)
|
Exec: '…'
|
Запуск командной строки как головного процесса новой задачи
|
Error while read_block. Retry...
|
Ошибка асинхронного чтения. Попытка чтения вновь.
|
REQUESTING TASK on 'queue'
|
Запрос на постановку новой задачи в дочернюю очередь queue
|
SENDING ADD: …
|
посылка параметра к запросу на постановку новой задачи
|
_Got …
|
Получен запрос от родительской очереди
|
_Send …
|
Посылка ответа родительской очереди
|
PARSE: '…' -> '…'
|
Подстановка псевдопеременных: слева от '->' указана исходная строка, справа – результирующая
|
Warning! Strange message from child... (…) Skipping.
|
Предупреждение о некорректном ответе дочерней очереди
|
Del_task: '…'
|
Удаление задачи с указанным идентификатором
|
Del_task2: …
|
Удаление задачи с указанным PID
|
_Dead... XXX res=YYY
|
Завершение задачи с идентификатором XXX. Зарезервировано процессоров – YYY
|