Тема: Делаем 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 , на тот почтовый ящик, который настроен для вызова приложения в аутлуке.
Резюме - будем иметь полностью автономную службу робота , которая будет перезапускаться без участия администратора в случае ее зависания .