# Планировщик задач
В первую очередь создается временной интервал, аналогичный crontab на странице /admin/django_celery_beat/crontabschedule/add/,
или же указываете свой интервал в поле Interval Schedule на странице Задачи.
Далее создаем саму задачу /admin/django_celery_beat/periodictask/add/, указывая Название и Временной интервал (может быть как Interval Schedule так и Crontab Schedule).
Выбираем Зарегистрированную Задачу (Поле Task registered):
processing.tasks.cron_task
В поле Позиционные аргументы/Positional Arguments необходимо указать необходимую для вызова функцию и ее аргументы (в формате json):
["calendar_notification_send_cron_events", null]
В поле Именованные аргументы оставляем:
{}
Пример задачи:
CREATE OR REPLACE FUNCTION calendar_notification_send_cron_events()
RETURNS boolean
LANGUAGE plpgsql
AS $function$
DECLARE
--
-- Календарь - рассылка уведомлений по вызову из крон
-- /admin/django_celery_beat/periodictask/1/change/
--
row record;
obj record;
BEGIN
-- список эвентов
FOR row IN (SELECT * FROM event_calendar WHERE DATE(NOW()) BETWEEN warning_date AND event_date) LOOP
-- список всех, у кого разрешены уведомления
FOR obj IN (SELECT * FROM authentication_user WHERE calendar_notification_enabled = TRUE) LOOP
-- создание уведомлений в личном кабинете
INSERT INTO notifications (type, created_at, recipient_id, is_read, body)
VALUES
(
'calendar', NOW(), obj.id, FALSE,
(SELECT name FROM event_headers WHERE id = row.event_id)
);
END LOOP;
END LOOP;
RETURN TRUE;
END;
$function$
После, Сохранить и проверить работоспособность.
Совет
Результат работы переодичных задач доступен на странице: /admin/django_celery_results/taskresult/