• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

azzza

Green Team
26.04.2011
68
3
BIT
6
Добрый день !

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

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

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

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

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
а зачем агенту запускаться на серверах где есть только дизайн и данных нет? ;)
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Добрый день !

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

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

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

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

azzza

Green Team
26.04.2011
68
3
BIT
6
а зачем агенту запускаться на серверах где есть только дизайн и данных нет? ;)

Репликация - чтобы обновлять дизайн.
Данные на каждом сервере свои, поэтому и не обновляем.

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

Мыш

Lotus Team
12.02.2008
1 219
29
BIT
66
Репликация - чтобы обновлять дизайн.
А не проще ли шаблон реплицировать - но это к слову.
А какие-нибудь ошибки пишутся в лог при работе агента? Включите усиленное логгирование Amgr.
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
эмм.... а чем не устраивает штатное обновление дизайна по расписанию?
 

azzza

Green Team
26.04.2011
68
3
BIT
6
эмм.... а чем не устраивает штатное обновление дизайна по расписанию?

При этом то тоже агент обновится (что и надо, а вдруг автор поменяет в нем что), вопрос про то как его настроить, чтобы после репликации он работал так же как и до, да и вообще работал, а не лез на сервер А
 

Мыш

Lotus Team
12.02.2008
1 219
29
BIT
66
azzza, дык у вас агент по приходу почты работает что ли?
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
При этом то тоже агент обновится (что и надо, а вдруг автор поменяет в нем что), вопрос про то как его настроить, чтобы после репликации он работал так же как и до, да и вообще работал, а не лез на сервер А
Я может конечно что-то путаю, но у агента есть свойство "работать на любом сервере"
А код написать так, чтоб работал на текущем сервере.
 
S

Svetlanika

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

VladSh

начинающий
Lotus Team
11.12.2009
1 784
157
BIT
57
Исполнение агента (любого) лучше организовать, чтобы он не лез на другой сервер. Т.е. агенты должны работать в пределах текущего сервера.
 

azzza

Green Team
26.04.2011
68
3
BIT
6
Я может конечно что-то путаю, но у агента есть свойство "работать на любом сервере"
А код написать так, чтоб работал на текущем сервере.

Именно это свойство и указали, агент запускается из-под автора, считаю что по этому и проблемы:

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

Green Team
26.04.2011
68
3
BIT
6
Исполнение агента (любого) лучше организовать, чтобы он не лез на другой сервер. Т.е. агенты должны работать в пределах текущего сервера.

Согласен, но как ?
Прямо в параметрах указать - теряется смысл репликации.

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

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

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
А почему агент крутится под подписантом? Почему не под админом или лучше всего под сервером?

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

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

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

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

Akupaka

Я очень настойчиво рекомендую создать две разные БД и обновлять дизайн по мере его изменения на двух серверах отдельно. Иначе бри любом сбое параметров репликации данные в БД смешаются.
 

azzza

Green Team
26.04.2011
68
3
BIT
6
А почему агент крутится под подписантом? Почему не под админом или лучше всего под сервером?

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

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

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

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

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

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

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

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

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

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

Добавлено:
Я очень настойчиво рекомендую создать две разные БД и обновлять дизайн по мере его изменения на двух серверах отдельно. Иначе бри любом сбое параметров репликации данные в БД смешаются.

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!