1

Тема: Делаем xrobot , который сам перезапускается

Время от времени отваливается робот, хотя служба "выполняется", но задания не выполняются. Есть возможность полностью автоматизировать.
Необходимо :

1. Настроить Microsoft Outlook. Настроить выполнение программы или скрипта при получении определенного письма.
Так же надо будет подправить регистр - Outlook 2016:
HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Security
В указанной ветке нас интересует ключ DWORD – EnableUnsafeClientMailRules, необходимое значение которого должно быть равно 1. OUTLOOK должен будет постоянно запущен на сервере для отработки правил.  Файл - Правила и оповещения.

2. Создать .bat . (  service_7_ads - ваше название службы)
taskkill /f /fi "services eq service_7_ads" 
TIMEOUT /T 2
net start service_7_ads
Что бы батник корректно исполнялся из аутлука нужно создать его ярлык и в настройках ярлыка ( свойства - ярлык - дополнительно) поставить запуск от имени администратора. И при построении правила указывать именно вызов ярлыка, а не самого батника.

3. Создать хранимую процедуру для ее вызова  через ADSWEB
CREATE PROCEDURE xRobotDelay
   ( 
      maxminutes Integer,
      result CHAR ( 10 ) OUTPUT,
      mindelay Integer OUTPUT
   ) 
BEGIN 
Declare @Hours integer;
Declare @Minute integer;
Declare @cTime string; 
Declare @nTimeR integer;
Declare @cursor cursor;
Declare @maxmin integer;
Declare @result string;

//@cTime=Current_Time();
OPEN @cursor As SELECT * FROM __input;

IF FETCH @cursor THEN
  @maxmin = @cursor.maxminutes;
ELSE
  @maxmin = -1;
ENDIF;

CLOSE @cursor;

OPEN @cursor as SELECT Top 1 start_time FROM logxrobot Order By start_time desc;

IF FETCH @cursor then
  @Minute=MINUTE(@cursor.start_time);
  @Hours=HOUR(@cursor.start_time);
ENDIF;
CLOSE @cursor;

@Hours=HOUR(Current_Time())-@Hours;
@Minute=MINUTE(Current_Time())-@Minute;
@nTimeR=@Hours*60+@Minute;

@result = iif(@nTimeR >= @maxmin,'FALSE','TRUE');

INSERT INTO __OUTPUT (mindelay,result) VALUES (@nTimeR,@result);   











END;

EXECUTE PROCEDURE sp_ModifyProcedureProperty( 'xRobotDelay', 
   'COMMENT', 
   '');


где maxminutes - максимальное число минут прошедших с момента выполнения последнего задания роботом.
Эта процедура должна быть доступна для вызова по вебу нужным пользователем ADS.

4. Необходимо установить UPTIME-KUMA  - https://github.com/louislam/uptime-kuma … to-Install
Новый монитор , тип монитора HTTP(s) - Ключевое слово - TRUE. Аутентификация - базовая, логин и пароль пользователя у которого есть доступ для вызова этой процедуры .
http://YOURSERVER:YOURPORT/adsweb/tirag/__query?statement=execute%20procedure%20xrobotdelay(10)
В данном случае, если более 10 минут не выполнялось задание роботом, прийдет ответ со статусом False и уйдет сообщение на почту.
Так же надо будет там же настроить оповещения по email , на тот почтовый ящик, который настроен для вызова приложения в аутлуке.

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