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

Статус
Закрыто для дальнейших ответов.

azzza

Well-known member
26.04.2011
65
0
#1
Добрый день !

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

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

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

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

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#2
а зачем агенту запускаться на серверах где есть только дизайн и данных нет? ;)
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#3
Добрый день !

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

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

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

Прошу Ваши мысли, от реплицируемой модели отказаться нет возможности.
ммммммм.... а в чем собственно проблема??? Под учеткой автора - права на запуск агентов
 

azzza

Well-known member
26.04.2011
65
0
#6
а зачем агенту запускаться на серверах где есть только дизайн и данных нет? ;)
Репликация - чтобы обновлять дизайн.
Данные на каждом сервере свои, поэтому и не обновляем.

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

Мыш

Премиум
12.02.2008
1 092
10
#7
Репликация - чтобы обновлять дизайн.
А не проще ли шаблон реплицировать - но это к слову.
А какие-нибудь ошибки пишутся в лог при работе агента? Включите усиленное логгирование Amgr.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#8
эмм.... а чем не устраивает штатное обновление дизайна по расписанию?
 

azzza

Well-known member
26.04.2011
65
0
#9
эмм.... а чем не устраивает штатное обновление дизайна по расписанию?
При этом то тоже агент обновится (что и надо, а вдруг автор поменяет в нем что), вопрос про то как его настроить, чтобы после репликации он работал так же как и до, да и вообще работал, а не лез на сервер А
 

Мыш

Премиум
12.02.2008
1 092
10
#10
azzza, дык у вас агент по приходу почты работает что ли?
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#11
При этом то тоже агент обновится (что и надо, а вдруг автор поменяет в нем что), вопрос про то как его настроить, чтобы после репликации он работал так же как и до, да и вообще работал, а не лез на сервер А
Я может конечно что-то путаю, но у агента есть свойство "работать на любом сервере"
А код написать так, чтоб работал на текущем сервере.
 

Svetlanika

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

VladSh

начинающий
Lotus team
11.12.2009
1 260
5
#13
Исполнение агента (любого) лучше организовать, чтобы он не лез на другой сервер. Т.е. агенты должны работать в пределах текущего сервера.
 

azzza

Well-known member
26.04.2011
65
0
#14
Я может конечно что-то путаю, но у агента есть свойство "работать на любом сервере"
А код написать так, чтоб работал на текущем сервере.
Именно это свойство и указали, агент запускается из-под автора, считаю что по этому и проблемы:

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 - запрещенны ограниченные операции.
 

azzza

Well-known member
26.04.2011
65
0
#15
Исполнение агента (любого) лучше организовать, чтобы он не лез на другой сервер. Т.е. агенты должны работать в пределах текущего сервера.
Согласен, но как ?
Прямо в параметрах указать - теряется смысл репликации.

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

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

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#16
А почему агент крутится под подписантом? Почему не под админом или лучше всего под сервером?

и простите... немного не по теме..но что это за конструкция?
Код:
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 ' если документ пришел - записываем в почтовую базу сервера уведомление
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#17
Проблема в том что агент не отрабатывает, хотя права у автора есть на исполнение.
Так на одном серве Б при выполнении стучится на А, выполнять типа там, т.к. почта подписанта на А.
Знаю что это регулирует параметр в ini , но нет пока возможности везде его прописать на сервах.
Вопрос в том , чтобы агент на Б исполнялся на Б и не нужен был бубен, для его коррекции после репликации- обновления дизайна.
не понял, почему агент Б, который должен исполняться на ЛЮБОМ сервере стучится на А?

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

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

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#18
Я очень настойчиво рекомендую создать две разные БД и обновлять дизайн по мере его изменения на двух серверах отдельно. Иначе бри любом сбое параметров репликации данные в БД смешаются.
 

azzza

Well-known member
26.04.2011
65
0
#19
А почему агент крутится под подписантом? Почему не под админом или лучше всего под сервером?

и простите... немного не по теме..но что это за конструкция?
Код:
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 ' если документ пришел - записываем в почтовую базу сервера уведомление
Проблему решил и разобрался, банально не дали правильно доступ на сервере Б и в поисках обращался к А, сразу же проверить и убедиться не было возможности, но постараюсь ответить Ваши на вопросы:

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) - следующий док колекции.

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

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

Добавлено:
не понял, почему агент Б, который должен исполняться на ЛЮБОМ сервере стучится на А?

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

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

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

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

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

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

Спасибо за советы и рекомендации ...
 
Статус
Закрыто для дальнейших ответов.