Как Лучше Организовать Исполнение Агента

Тема в разделе "Lotus - Программирование", создана пользователем azzza, 16 сен 2012.

Статус темы:
Закрыта.
  1. azzza

    azzza Well-Known Member

    Регистрация:
    26 апр 2011
    Сообщения:
    54
    Симпатии:
    0
    Добрый день !

    Есть сервер А, крутится некая база в ней агент на Lotus Script по расписанию через каждые 5 мин, выполнение на любом сервере, запуск под учеткой автора (подписанта).

    Организовали односторонюю репликацию (в ручную не по расписанию) на сервера Б и В (только дизайн, без данных).

    Как лучше настроить агент, чтобы он исполнялся на серверах Б и В корректно, под учеткой автора, что для этого минимально необходимо. Автор имеет почту на сервере А.

    Прошу Ваши мысли, от реплицируемой модели отказаться нет возможности.
     
  2. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    а зачем агенту запускаться на серверах где есть только дизайн и данных нет? ;)
     
  3. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    ммммммм.... а в чем собственно проблема??? Под учеткой автора - права на запуск агентов
     
  4. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.020
    Симпатии:
    8
    ToxaRat, мож как раз чтоб дизайн обновлять? :)
     
  5. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Все равно не понятно в чем проблема ;)
     
  6. azzza

    azzza Well-Known Member

    Регистрация:
    26 апр 2011
    Сообщения:
    54
    Симпатии:
    0
    Репликация - чтобы обновлять дизайн.
    Данные на каждом сервере свои, поэтому и не обновляем.

    Проблема в том что агент не отрабатывает, хотя права у автора есть на исполнение.
    Так на одном серве Б при выполнении стучится на А, выполнять типа там, т.к. почта подписанта на А.
    Знаю что это регулирует параметр в ini , но нет пока возможности везде его прописать на сервах.
    Вопрос в том , чтобы агент на Б исполнялся на Б и не нужен был бубен, для его коррекции после репликации- обновления дизайна.
    Вот и решил спросить умных людей как быть.
     
  7. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.020
    Симпатии:
    8
    А не проще ли шаблон реплицировать - но это к слову.
    А какие-нибудь ошибки пишутся в лог при работе агента? Включите усиленное логгирование Amgr.
     
  8. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    эмм.... а чем не устраивает штатное обновление дизайна по расписанию?
     
  9. azzza

    azzza Well-Known Member

    Регистрация:
    26 апр 2011
    Сообщения:
    54
    Симпатии:
    0
    При этом то тоже агент обновится (что и надо, а вдруг автор поменяет в нем что), вопрос про то как его настроить, чтобы после репликации он работал так же как и до, да и вообще работал, а не лез на сервер А
     
  10. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.020
    Симпатии:
    8
    azzza, дык у вас агент по приходу почты работает что ли?
     
  11. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Я может конечно что-то путаю, но у агента есть свойство "работать на любом сервере"
    А код написать так, чтоб работал на текущем сервере.
     
  12. Svetlanika

    Svetlanika New Member

    Регистрация:
    21 ноя 2011
    Сообщения:
    3
    Симпатии:
    0
    Вот, вот. Не понятно что за агент. С начала говорится, что "Проблема в том что агент не отрабатывает, хотя права у автора есть на исполнение.". Хотя оказывается, что агент всетаки отрабатывает - "на одном серве Б при выполнении стучится на А".
    Получается проблема не в отработке или неотработке агента, а в самом агенте.
    Тогда агент в студию! Может в нем и написано СТУЧИСЬ НА СЕРВЕР А, тогда никакими настройками это не исправить, а только исправлением этой строчки или даже нескольких
     
  13. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Исполнение агента (любого) лучше организовать, чтобы он не лез на другой сервер. Т.е. агенты должны работать в пределах текущего сервера.
     
  14. azzza

    azzza Well-Known Member

    Регистрация:
    26 апр 2011
    Сообщения:
    54
    Симпатии:
    0
    Именно это свойство и указали, агент запускается из-под автора, считаю что по этому и проблемы:

    1. На сервере Б агент отрабатывает , но пишет, что запустился на сервере А (см. вывод "Запуск агента на "+agentServer$+" ..." )
    2. На серверах А и В агент отрабатывает как нужно.

    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"Может это мой случай?"</div></div><div class="sp-body"><div class="sp-content">Существуют еще два ньюанса, связанных с выполнением почтовых агентов. Первое, почтовые агенты, по умолчанию, запускаются на почтовых серверах автора агента (пользователя, сохранившего этот агент). То есть, на сервере, указанном как главный (почтовый) в документе пользователя серверной адресной книги. В репликах почтовой базы, расположенной на других серверах, эти агенты запускаться не будут. Для отключения проверки почтового сервера автора агента, администратор сервера может прописать в файле настроек переменную AMgr_DisableMailLookup со значением 1.

    У меня ограничен доступ на Б и В (консоль и т.д.) , поэтому проверить параметр не могу ;)

    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"Агент"</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='LS'>Option Public


    Sub Initialize
    On Error GoTo err1
    Dim s As New NotesSession <----------------- Видимо сессия получается для Б как сервера А т.к.
    подписан агент автором с почтой на А (брррбред)
    Dim agent As NotesAgent
    Dim db As NotesDatabase
    Dim col As NotesDocumentCollection
    Dim bb As NotesRichTextItem
    Dim maildoc As NotesDocument
    Dim doc As NotesDocument

    Set agent = s.CurrentAgent
    Set db=s.currentdatabase

    agentName$=agent.name
    agentSigner$ = agent.Owner
    agentDb$=db.Title
    agentServer$=db.Server

    Dim agentLog As New NotesLog("Agent log")
    Call agentLog.OpenAgentLog
    Call agentLog.LogAction("Запуск агента на "+agentServer$+" ...") <--------------------Здесь на А и В показывает корректно,
    а на Б кажет А сервер
    '---------------------------начало основного кода агента здесь
    ' нашли почтовую БД
    Dim ServerName As New NotesName(db.Server)
    Dim maildb As New NotesDatabase(ServerName.Canonical,"mail1.box")
    If Not maildb.IsOpen Then
    Set maildb = New NotesDatabase(ServerName.Canonical,"mail.box")
    End If

    If Not maildb.IsOpen Then
    tema$={Произошла ошибка в агенте "}+agentName$+{" в БД "}+agentDb$+{" на сервере "}+agentServer$+{"}
    mess$={ОШИБКА: не могу открыть почтовую базу mail.box}
    Call errormail(tema$,mess$,agentSigner$)
    Exit Sub
    End If

    search$={Form="Memo" & Mail_Server="}+ServerName.Canonical+{" & Mailed!="1"}
    Set col=db.search(search$,Nothing,0)
    If col.count=0 Then
    Call agentLog.LogAction("Нет документов для обработки...")
    GoTo endy
    End If
    Set maildoc=col.getfirstdocument
    unid=maildoc.ID(0)
    While Not maildoc Is Nothing
    ' проверяем, пришел ли документ на сервер
    If Trim(unid)<>"" Then Set doc=db.getdocumentbyunid(unid)
    If Not doc Is Nothing Then ' если документ пришел - записываем в почтовую базу сервера уведомление

    Set bb = maildoc.Getfirstitem("body")
    If bb Is Nothing Then Set bb = maildoc.createrichtextitem("body")

    Set docProfile=db.GetProfileDocument("ProfileForm",db.server)
    If Not docProfile Is Nothing Then

    Call bb.appendtext(maildoc.txt(0))
    Call bb.addnewline(2)
    Call bb.AppendDocLink( doc, {ссылка на документ }+type_mail$+{.})
    Call bb.appendtext({ - ссылка на документ }+type_mail$+{.})
    Call bb.addnewline(1)
    Call bb.AppendDocLink( db, "ссылка на базу данных")
    Call bb.appendtext({ - ссылка на базу данных "}+db.title+{"})
    maildoc.Recipients=maildoc.SendTo(0)
    maildoc.Mailed="1"
    Call maildoc.Save(True,True)
    Call maildoc.CopyToDatabase(maildb)
    End If
    End if
    nextmail:
    Set maildoc=col.getnextdocument(maildoc)
    If Not maildoc Is Nothing Then unid=maildoc.ID(0)
    Wend
    endy:
    '---------------------------конец основного кода агента здесь
    Call agentLog.LogAction("Завершение работы агента ...")
    Call agentLog.Close()

    Exit Sub

    err1:
    tema$={Произошла ошибка в агенте "}+agentName$+{" в БД "}+agentDb$+{" на сервере "}+agentServer$+{"}
    mess$={ОШИБКА: "} & Str(Err) & {:} & Error$ & { " в строке } & Erl() & {.}
    Call errormail(tema$,mess$,agentSigner$)
    Exit Sub
    End Sub
    Sub errormail(tema As String, mess As String, who As String)
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Set db=s.currentdatabase
    Set mdoc=db.createdocument
    mdoc.form="Memo"
    mdoc.Subject=tema
    mdoc.SendTo=who
    Set rtitem = New NotesRichTextItem( mdoc, "Body" )
    Call rtitem.AppendText(mess)
    Call mdoc.Send(False)
    End Sub[/CODE]



    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"Параметры агента:"</div></div><div class="sp-body"><div class="sp-content">
    1.Запуск по расписанию каждые 5 мин весь день.

    2. Выполняться на любом сервере - не могу указывать конкретные, тогда нет смысла в репликации и надо после нее опять по всем серверам прописывать в таком агенте локальный сервер.

    3.Выполняется из-под автор

    4. уровень без-и 1 - запрещенны ограниченные операции.
     
  15. azzza

    azzza Well-Known Member

    Регистрация:
    26 апр 2011
    Сообщения:
    54
    Симпатии:
    0
    Согласен, но как ?
    Прямо в параметрах указать - теряется смысл репликации.

    Нужно после изменения чего -либо и соответственно репликации заходить на каждую базу и прописывать заного локальный сервер агенту ;)

    Непойму что он не хватает локальный серв , может тот случай который указал выше, тогда как избежать его ?
     
  16. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    А почему агент крутится под подписантом? Почему не под админом или лучше всего под сервером?

    и простите... немного не по теме..но что это за конструкция?
    Код (Text):
    Set col=db.search(search$,Nothing,0)
    If col.count=0 Then
    Call agentLog.LogAction("Нет документов для обработки...")
    GoTo endy
    End If
    Set maildoc=col.getfirstdocument
    unid=maildoc.ID(0)
    While Not maildoc Is Nothing
    ' проверяем, пришел ли документ на сервер
    If Trim(unid)<>"" Then Set doc=db.getdocumentbyunid(unid)
    If Not doc Is Nothing Then ' если документ пришел - записываем в почтовую базу сервера уведомление
     
  17. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    не понял, почему агент Б, который должен исполняться на ЛЮБОМ сервере стучится на А?

    думаю тут проблема не с агентом, а с его логикой, и как почта подписанная влияет на запуск агента?

    возможно речь о том, что сервер Б не является почтовым и оттого не отрабатывает агент на тригер о приходе почты?
     
  18. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Я очень настойчиво рекомендую создать две разные БД и обновлять дизайн по мере его изменения на двух серверах отдельно. Иначе бри любом сбое параметров репликации данные в БД смешаются.
     
  19. azzza

    azzza Well-Known Member

    Регистрация:
    26 апр 2011
    Сообщения:
    54
    Симпатии:
    0
    Проблему решил и разобрался, банально не дали правильно доступ на сервере Б и в поисках обращался к А, сразу же проверить и убедиться не было возможности, но постараюсь ответить Ваши на вопросы:

    1. Как уже говорил производится репликация, поэтому под автором все работает, админы на серверах разные, сервера в разных доменах, поэтому если следовать Вашему предполажению (верному в другом случае), я получу вариант , что после репликации нужно переподписыватьна каждом сервере агента учеткой сервера, либо админа (т.к. они для разных баз разные).
    2. А что с конструкцией?

    search$={Form="Memo" & Mail_Server="}+ServerName.Canonical+{" & Mailed!="1"} - выборка уведомлений Memo на конкретном серве с флагом означающим , что отправки не было еще.
    Set col=db.search(search$,Nothing,0) - получается коллекция документов.
    If col.count=0 Then end if - проверка коллекции
    Set maildoc=col.getfirstdocument - первый док из коллекции
    While Not maildoc Is Nothing - бежим по коллекции
    ниже
    Set maildoc=col.getnextdocument(maildoc) - следующий док колекции.

    Возможно у Вас есть предложения по оптимизации кода? С радостью рассмотрю. Если что-то другое Вам не понравилось, отпишите детальнее. ;)

    Спасибо за советы...

    Добавлено:
    Проблема с доступом, я описал выше, не дали корректно, а так как реплика, умный Лотус ищет ее и находит серв А.
    Серв Б - почтовый, агент работает не по тригеру, см. параметры агента, я указывал :)

    С подписантом, действительно есть такая вещь, но она касается почтовых агентов, а мой не такой (меня это тоже спутало)

    Про подписанта и все такое читал Здесь

    Спасибо за советы ...

    Добавлено:
    Спасибо за рекомендацию, но серверов конечно больше чем два и обновлять дизайн отдельно мучително (недаром единица производительности в России - один влом :) ), да Вы все верно заметили, но установки репликации отслеживаем и репликации делаются только вручную и только для изменения дизайна, :) допущения бывают во всем и из зол выбираем то с чем жить привычнее :) и огород городить кажется удобнее :)

    Спасибо за советы и рекомендации ...
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей