Система периодических событий на сайте (планировщик, крон, cron)
Планировщик по периоду в секундах
В системе можно задавать периодические события через хранимые процедуры.
Каждую минуту вызывается процедура as_nt_sync_start (вызывается каждые N секунд по внутреннему cron механизму).
Она вызывает следующие процедуры:
- as_nt_sync_min
- as_nt_sync_hour
- as_nt_sync_day
- as_nt_sync_week
- as_nt_sync_month
Меняя код этих процедур можно выполнять необходимые проверки по базе и вызывать свои процедуры (например уведомления пользователей).
Примечание: Для вызова раньше мы использовали сервисы наподобие https://cron-job.org. Теперь используется внутренний крон, который настраивается в App Settings в web.config.
Cron.Key - некий ключ, который затем проверяется в процедуре as_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
as_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 поиск по нашей документации
- Руководства
- Основа Falcon Space Из чего состоит веб-платформа Falcon Space Настройки системы Работа со страницами Создание структуры БД - создание таблиц БД и связей между ними Описание кабинета для администрации сайта (роль editor) Описание интерфейса администратора-разработчика веб-платформы Внешние действия (уведомления, пуш, email, вызов API) Управление ролями и пользователями на сайте Система периодических событий на сайте (планировщик, крон, cron) Универсальный поиск по личному кабинету на сайте Falcon Space. Словарь терминов Соглашения по SQL коду в платформе
- Основные компоненты
- Возможности
- Коммуникация с пользователем
- Дизайн, стилизация
- Лендинги
- Универсальный API
- Примеры интеграций
- Каталоги
- Навигация
- Документы
- Дополнительные компоненты
- Продвижение, SEO
- Системные моменты
- Системное администрирование
- HOWTO
- Таблицы
- Формы
- Загрузка файлов, картинок
- Работа с SQL
- HOWTO JS
- HOWTO Верстка
- Решение проблем
Falcon Space
Это снижение стоимости владения
за счет меньшего количества людей для поддержки и узкого стека разработки. Про снижение стоимости владения продуктом
Это быстрое внесение изменений
по ходу эксплуатации программы. Как создается функционал на платформе
Это простой удобный интерфейс
адаптация под мобильные устройства. Про юзабилити платформы