На /syssp странице расположена таблица периодических задач.
Настройки задачи:
К примеру, если тип = hours (часы), а значения 4,8, то значит ежедневно в 4 и 8 часов будет запускать процедура.
Процедура имеет следующий вид:
CREATE PROCEDURE [dbo].[sync_checksiteavailability]
@code nvarchar(128),
@result bit output,
@msg nvarchar(max) output
AS
BEGIN
select 1
set @result = 1
set @msg = 'Проверок -' + (select cast(count(*) as nvarchar(128)) from @urls)
END
Параметры:
Хранимая процедура может содержать выходные SELECT - это внешние действия к выполнения (вызов API, отправка уведомлений и т.д.).
В логе вызовов действий фиксируются result, msg из вызываемых хранимых процедур, а также длительность их исполнения.
Примечание:
Планировщик по периоду в секундах
В системе можно задавать периодические события через хранимые процедуры.
Каждую минуту вызывается процедура falcon_nt_sync_start (вызывается каждые N секунд по внутреннему cron механизму).
Она вызывает следующие процедуры:
Меняя код этих процедур можно выполнять необходимые проверки по базе и вызывать свои процедуры (например уведомления пользователей).
Примечание: Для вызова используется внутренний крон, который настраивается в App Settings в web.config (или в Core версии в appsettings.json).
По умолчанию процедуры пишут в trace событие вызова процедуры.
Пример процедуры start:
ALTER PROCEDURE [dbo].[falcon_nt_sync_start]
@key nvarchar(32)
AS
BEGIN
-- key from config settings
if(@key<>'KEY') begin
select 'Error' Msg, 0 Result
return
end
declare @sec int = DATEPART(SECOND, getdate()), @min int = DATEPART(MINUTE, getdate())
declare @mins int,
@isNextMin bit = 0,
@curDateMins int = DATEPART(MINUTE, getdate()) + 60 * DATEPART(HOUR, getdate()) + 24* 60 + DATEPART(DAY, getdate())
declare @temp int
select @temp = mins from as_nt_sync where id = 1
if(@temp = @curDateMins ) begin
set @mins = @temp
end else begin
update as_nt_sync
set mins = @curDateMins
where id = 1
select @mins = mins from as_nt_sync
where id = 1
set @isNextMin = 1
end
exec as_print @str = @mins
-- SELECT 1
select @mins Result, 'ok' Msg
-- SELECT 2-10 Вызов внешнего действия (они могут быть сделаны во внутр процедурах)
/*
select 'email' type, -- email, sms, notification, clearcache
'ru@rudensoft.ru' [to], 'sub1' subject, 'bodyXXX'+@itemIDs body, ---EMAIL
'Text 1' msg, '723429234' [number], --- SMS
'' prefix, --CLEAR CACHE
'text1' text , 'ru@rudensoft.ru' [to], 'ticketExecutor' typeCode, 'http///' url, 'add111' additional -- notification
*/
if(@isNextMin = 1) begin
exec [falcon_nt_sync_min]
end
if(@mins %60 = 0)begin
exec [falcon_nt_sync_hour]
end
if(@mins %(60 *24) = 0)begin
exec [falcon_nt_sync_day]
end
if(@mins %(60 *24 * 7) = 0)begin
exec [falcon_nt_sync_week]
end
if(@mins %(60 *24 * 30) = 0)begin
exec [falcon_nt_sync_month]
end
END
falcon_nt_sync_start возвращает следующие результаты:
ВАЖНО. Необходимо обеспечить, чтобы пул IIS никогда не отключался.
Для этого используем настройки пула (IIS Manager, пул, Advanced Settings):
Вы можете задать в web.config параметр Cron:Schedules, например,
<add key="Cron:Schedules" value="0 0 8 ? * MON-FRI *||0 1 19 ? * MON-FRI *||0 0/1 * * * ?"></add>
Правила перечислены через ||. Описание формата указания временных триггеров - https://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontriggers.html#example-cron-expressions
На русском описание формата - https://russianblogs.com/article/1098294979/
Генератор выражений - https://ru.rakko.tools/tools/88/
Это позволит вызывать хранимую процедуру [falcon_nt_sync_schedule] в определенные моменты.
Вид процедуры:
CREATE OR ALTER PROCEDURE [dbo].[falcon_nt_sync_schedule]
@key nvarchar(32)
AS
BEGIN
-- SELECT 1
select 1 Result, '' msg
-- SELECT 2 - 10 - Outer actions
execute as_print 'test'
print getdate()
END