Серверная задача Agent Manager
AMGR В версиях 4.х выполнение агентов в базах, расположенных на сервере, обеспечивает задача Agent Manager.

Рис. 3.5 Если данная база расположена на сервере, агенты RIDUID и UpdateMailIn будет выполнять задача Agent Manager
Агенты (см. Рис. 3.6) могут быть "написаны" с использованием простых действий, @-формул или на языке LotusScript. Агенты бывают двух типов:
· личные
(personal) - для их создания достаточно иметь доступ не ниже читателя с установленной опцией Create Personal Agents и, чтобы дополнительно иметь возможность создавать агентов на языке LotusScript, с установленной опцией Create LotusScript Agents
· общие
(shared) - для их создания необходим доступ не ниже дизайнера и, чтобы дополнительно иметь возможность создавать агентов на языке LotusScript, с установленной опцией Create LotusScript Agents.
Как общие, так и личные агенты, в зависимости от заданных условий их запуска (When should this agent run?), могут выполняться как станцией, так и сервером. На сервере выполняются только агенты с условиями запуска If New Mail Has Arrived
(по событию прихода почты в базу), If Documents Have Been Created or Modified (по событию создания или изменения документа в базе) и On Schedule... (по расписанию...), а осуществляет их выполнение серверная задача Agent Manager. Агенты с другими условиями запуска всегда выполняются станцией.
Агенты, написанные на языке LotusScript, в зависимости от использованных их разработчиком языковых возможностей и методов встроенных классов, могут быть "ограниченными по возможностям" (restricted) или "неограниченными по возможностям" (unrestricted). "Неограниченные по возможностям" агенты могут работать с файлами, изменять системное время, отправлять почту, запускать другие программы или вызывать функции из стандартных или созданных их разработчиком библиотек динамической компоновки, то есть имеют как полный доступ к компьютеру сервера Notes, так и возможность передать информацию с этого компьютера на другие компьютеры. Такие агенты "в руках добропорядочного разработчика" могут выполнять сложные и "полезные" для вашей организации операции, а "в руках недобропорядочного разработчика" потенциально способны "нанести вред" вашей организации. Вопрос о "полезности" или "вредности"
конкретного агента может быть решен администратором только посредством анализа всех его исходных текстов. В Notes версий 4.х каждый агент (как общий, так и личный) автоматически "подписывается" разработчиком, когда тот сохраняет агента в базе. А у администратора имеется возможность разрешать или запрещать запуск на сервере агентов, созданных конкретными разработчиками. В ситуации "полного недоверия" администратор может разрешить запуск на сервере только "своих собственных" агентов, а от разработчиков требовать предоставления созданных ими агентов, и, после анализа их исходных текстов, "пересохранять агентов под своим ID-файлом, за своей подписью".

Рис. 3.6 Определение условий запуска агентов
Когда наступает условие для запуска агента, задача Agent Manager выполняет следующее:
1. Проверяет, кем "подписан" агент. Обычно агент подписан тем разработчиком, который последним сохранил этого агента. Если агент "не подписан", задача не будет его выполнять.
2. Проверяет информацию из документа Server в общей адресной книге, чтобы определить, разрешил ли администратор сервера запускать на нем личных, "ограниченных по возможностям" (restricted) и "неограниченных по возможностям" (unrestricted) агентов, созданных этим разработчиком (поля с метками Run personal agents:,
Run restricted LotusScript agents: и Run unrestricted LotusScript agents: на Рис. 3.7).
3. Если агент написан на языке LotusScript, проверяет по коду агента, является ли он "ограниченным" или "неограниченным".
4. Если выполнение разрешено, начинает выполнение агента.

Рис. 3.7 Фрагмент документа Server, содержащий информацию, касающуюся выполнения агентов задачей Agent Manager
Если поле с меткой Run personal agents: пусто, задача Agent Manager будет выполнять в базах на сервере личных агентов, созданных любыми пользователями. Если поле с меткой Run restricted LotusScript agents: пусто, задача Agent Manager не будет выполнять ничьих агентов с ограниченными возможностями, написанных на языке LotusScript. Аналогично, если поле с меткой Run unrestricted LotusScript agents: пусто, задача не будет выполнять ничьих агентов с неограниченными возможностями, написанных на языке LotusScript. Для простоты управления запуском агентов администратору можно порекомендовать создать в общей адресной книге группы с именами наподобие RestrictedAgents, UnrestrictedAgents
и, если привилегии на запуск личных агентов предоставляются не всем пользователям, то и PersonalAgents, включить в соответствующие поля в документе Server только названия групп и в дальнейшем манипулировать составом этих групп.
Кроме ограничений на возможность запуска агентов, на работу задачи Agent Manager оказывают влияние значения из следующих полей в документе Server.
Refresh agent cache Кэш задачи Agent Manager содержит список агентов, "запланированных" для выполнения в течении текущих суток. В данном поле дается время, когда задача должна обновлять список агентов, запланированных для выполнения в течение суток.
Daytime and Nighttime
Эти поля "разбивают" рабочий день на два отрезка - "дневное" и "ночное" время. По умолчанию дневное время с 8 утра до 8 вечера, а ночное - с 8 вечера до 8 утра. Для каждого отрезка времени для Agent Manager выделяется то или иное количество ресурсов, обычно меньшее в дневное время и относительно большее в ночное время. Отрезки не должны пересекаться. Во время суток, не принадлежащее ни к дневному, ни к ночному отрезкам, задача вообще не будет выполнять никаких агентов.
Max concurrent agents Только один агент может выполняться в базе данных в одно и то же время, но агенты в разных базах данных на том же самом сервере могут выполняться одновременно, однако в количестве не большем, чем определено в этом поле. Значение по умолчанию - 1 для дневного времени и 2 для ночного времени. Согласно указанному вами значению основная задача Agent Manager запускает соответствующее число своих подзадач, которые отображаются по команде Show Task как Agent Manager Executive '1': статус
, Agent Manager Executive '2': статус
... Каждая из этих подзадач одновременно может исполнять только одного агента. Количество этих подзадач обычно различно на дневном и ночном отрезках времени.
Maximum LotusScript execution time
Эти поля ограничивают время, отводимое на выполнение одного агента, написанного на языке LotusScript, на дневном и ночном отрезках времени. Если такой агент не успевает завершиться за заданное время, то Agent Manager "снимает"
его. Данная возможность введена, в частности, в целях предотвращения потери производительности сервера из-за зацикливания "недостаточно отлаженных агентов".
Max % busy before delay Эти поля, если "рассматривать осреднение по времени", определяют в процентах количество процессорного времени, отводимого задаче Agent Manager на дневном и ночном отрезках времени. Значение по умолчанию - 25 % для дневного и 35 % для ночного отрезка. Позволяет не допустить захвата всех ресурсов сервера на выполнение агентов - есть и другие серверные задачи, которые должны выполняться параллельно.
Возникающие при работе события Agent Manager заносит в базу "Протокол работы сервера".
08.09.96 12:02:49 AMgr: Start executing agent 'UpdateMailIn' in 'BASES400\Secretariat\ITSNMLST.NSF' by Executive '1' (агент выполнен нормально)
08.09.96 12:02:53 AMgr: Start executing agent 'UpdateMailIn' in 'BASES400\Secretariat\ITSSecrt.NSF' by Executive '1'
08.09.96 12:02:54 AMgr: Agent ('UpdateMailIn' in 'BASES400\Secretariat\ITSSecrt.NSF') printing: Найдено - 9 док-в. (агент выполнен нормально)
08.09.96 12:02:56 AMgr: Start executing agent 'UpdateMailIn' in 'BASES400\Secretariat\ITSsbd1.NSF' by Executive '1' (агент выполнен нормально)
08.09.96 12:03:41 AMgr: Agent 'Mail Event Log' in 'NOTES400\STUD\DLibR4.nsf' did not process all documents successfully. Check the Agent Log for more information: LotusScript did not run to completion. (ошибка при выполнении агента)
08.09.96 12:03:41 AMgr: Error executing agent 'UpdateMailIn' in 'BASES400\Secretariat\ITSNMLST.NSF', agent will be removed from current schedule: Document has been modified or corrupted since signed! (data) (ошибка при выполнении агента)
Кроме того, на работу Agent Manager оказывают влияние следующие переменные из файла NOTES.INI:
· AMgr_NewMailEventDelay = значение Задает время задержки (в минутах) перед выполнением агента, запускаемого по факту доставки почты (от момента обнаружения события доставки почты до выполнения агента). Значение по умолчанию 1.
· AMgr_NewMailAgentMinInterval = значение Задает минимальное время (в минутах), которое должно пройти между последовательными выполнениями одного и того же агента, запускаемого по факту доставки почты. Значение по умолчанию 0.
· AMgr_DocUpdateEventDelay = значение Задает время задержки (в минутах) перед выполнением агента, запускаемого по факту создания нового или изменения существующего документа в базе (от момента обнаружения события изменения документа до выполнения агента). Значение по умолчанию 5.
· AMgr_DocUpdateAgentMinInterval = значение Задает минимальное время (в минутах), которое должно пройти между выполнением агента, запускаемого по факту изменения документа в базе, на одном и том же документе. Значение по умолчанию 30.
· AMgr_WeekendDays = день1, день2, … Когда агент запускается по расписанию, для него в окне Schedule доступна опция Don't run on weekends, запрещающая выполнение этого агента по выходным дням. Данный параметр содержит список дней, которые считаются выходными (воскресенье = 1, понедельник = 2, …, суббота = 7). Значение по умолчанию для уик-энда - суббота (7) и воскресенье (1).

Рис. 3.8 "Ежедневный" агент не выполняется по выходным дням
· Log_AgentManager = значение Значение 1 требует протоколировать (на консоли сервера и в базе "Протокол работы сервера") факт запуска каждого агента, а значение 0 - не протоколировать.
Отметим еще два момента, касающихся выполнения агентов в базах на сервере.
Во-первых, с версии 4.5 появилась возможность запрещать в конкретной базе выполнение всех общих и личных агентов, запускаемых по расписанию, приходу почты или модификации документа. Для этого в окне свойств базы на закладке Basics необходимо установить опцию Disable background agents for this database.
Во-вторых, все рассмотренное выше касалось запуска агента задачей Agent Manager, но не затрагивало вопроса, какие действия в самой базе может выполнить этот агент. Возможности агента в базе определяются уровнем доступа к ней разработчика этого агента. Так, читатель с правом создания персональных агентов может создать в базе на сервере личного агента, который по расписанию удаляет или модифицирует документы в этой базе, применяя простые действия или @-формулы. Задача Agent Manager будет запускать этого агента, если, например, в документе Server поле Run personal agents пусто. Однако агент не сможет удалить или модифицировать документы в базе, поскольку его прав доступа (читатель) для этого недостаточно.