Выгода от использования Falcon Space
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Периодические действия на сайте (планировщик, крон, cron)
Система периодических задач (фев 2025, пакет sync)
На /syssp странице расположена таблица периодических задач.
Настройки задачи:
- тип - минусы в чате, часы дня, дни недели, дни месяца или дни года.
- значения - список числе через запятую (значение зависит от типа).
- хранимая процедура - sync_{code} вызвается на основе Типа и Значений.
К примеру, если тип = 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
Параметры:
- @code - код задачи
- @result, @msg - выходные параметры, которые идут в лог вызова.
Хранимая процедура может содержать выходные SELECT - это внешние действия к выполнения (вызов API, отправка уведомлений и т.д.).
В логе вызовов действий фиксируются result, msg из вызываемых хранимых процедур, а также длительность их исполнения.
Примечание:
- Для внедрения подобной системы необходимо устанавливать пакет sync (важно - затронет страницы /syssp и процедуру falcon_nt_sync_start).
- Также реализована возможность переноса SQL по периодическим задачам (т.е. их можно добавлять в пакет переноса SQL).
Описание системы периодических действий
Планировщик по периоду в секундах
В системе можно задавать периодические события через хранимые процедуры.
Каждую минуту вызывается процедура falcon_nt_sync_start (вызывается каждые N секунд по внутреннему cron механизму).
Она вызывает следующие процедуры:
- falcon_nt_sync_min
- falcon_nt_sync_hour
- falcon_nt_sync_day
- falcon_nt_sync_week
- falcon_nt_sync_month
Меняя код этих процедур можно выполнять необходимые проверки по базе и вызывать свои процедуры (например уведомления пользователей).
Примечание: Для вызова используется внутренний крон, который настраивается в App Settings в web.config (или в Core версии в appsettings.json).
- Cron.Key - некий ключ, который затем проверяется в процедуре falcon_nt_sync_start (позволяет избежать случайных запусков процедуры).
- Cron:PeriodSeconds - период в секундах между запусками, по умолчанию 60 секунд.
По умолчанию процедуры пишут в 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 возвращает следующие результаты:
- SELECT 1 - Msg, Result
- SELECT 2-10 - вызовы внешних действий (почта, смс, уведомление и т.д.). См. вызов внешних действий. Эти SELECT могут вызываться где-то внутри периодических процедур (min, hour и т.д.). И важно - эти процедуры не должны возвращать в общий поток вывода ничего кроме подобных запросов!
ВАЖНО. Необходимо обеспечить, чтобы пул IIS никогда не отключался.
Для этого используем настройки пула (IIS Manager, пул, Advanced Settings):
- In General section, at Start Mode, Select AlwaysRunning (IIS 8.5) or true for (IIS 7.5, 8)
- In Process Model Section-> Idle Timeout(minutes) set to 0 (meaning: No Idel timeout)
- In Recycling section -> Regular time Interval set to 0 (meaning: no recycling)
Планировщик по точному времени
Вы можете задать в 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
Google поиск по нашей документации
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта