Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Написание планировщика. / 14 сообщений из 14, страница 1 из 1
29.11.2007, 15:01:14
    #34975203
Павел. С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание планировщика.
Здравствуйте!

Кто-нибудь писал планировщика событий?

Есть задача, которую необходимо автоматически выполнять по графику. Задача - генерация отчета, отправка его по почте и.т.д.

Собственно вопрос:

В каком виде хранить данные (храню в БД) о графике выполнения?
Как эти данные обрабатывать самим планировщикам? Планировщик - некий поток, который каждые несколько сек. смотрит в базу на наличие заданий.

Необходимо, чтобы можно было создавать примерно такие задания:
1) Выполняющееся периодически, скажем через каждые 5 часов.
2) Так же как и в 1), только в определенные дни недели.
3) Ежедневно, скажем в 12:00 и 16:00.
4) По вт, ср, пт, в каждые 10 минут, но с 12:00 по 16:00

Буду рад любым комментариям!
...
Рейтинг: 0 / 0
29.11.2007, 15:24:14
    #34975361
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание планировщика.
А чем Cron не устраивает ?
...
Рейтинг: 0 / 0
29.11.2007, 15:50:21
    #34975489
Павел. С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание планировщика.
ZmeisheА чем Cron не устраивает ?

Тем, что ф-я планировки должна быть реализована в моей программе.
На машине с программой крона нет (если по Вин).

Нужно самописное что-то.
...
Рейтинг: 0 / 0
29.11.2007, 16:00:50
    #34975538
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание планировщика.
Ну так и делай в своей программе. И я так сделал.
А запуск самой программы по расписанию почему не прописать в Linux Cron или куда там в Win ?
...
Рейтинг: 0 / 0
29.11.2007, 16:06:41
    #34975567
Павел. С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание планировщика.
ZmeisheНу так и делай в своей программе. И я так сделал.
А запуск самой программы по расписанию почему не прописать в Linux Cron или куда там в Win ?

Попытаюсь объяснить:

моя программа - некий сервер, работает с бд. имеет несколько модулей. у каждого свой поток, свое соединение с БД, свой функционал.

Один из таких модулей должен генерить отчеты и слать кому надо (уже есть). Но делать это он должен по расписанию.
Он не должен зависить от платформы. Он не должен создавать доп. процессов.
У него есть его рабочий поток и соединение с БД (ну и с СМТП для почты).

Т.е. весь функционал по планированию должен быть реализован в нем.
...
Рейтинг: 0 / 0
29.11.2007, 16:11:07
    #34975585
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание планировщика.
Тогда читай документацию по конфигурированию Linux Cron и реализуй это у себя.

авторВ каком виде хранить данные (храню в БД) о графике выполнения?
Точно также как Cron хранит. Тока не одной строкой, а разнеси в таблицу БД по разным полям.
...
Рейтинг: 0 / 0
29.11.2007, 17:06:49
    #34975818
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание планировщика.
Павел. С
Т.е. весь функционал по планированию должен быть реализован в нем.
Вы меня конечно извините, но функционал планирования ИМХО должен быть реализован в отдельном ни от кого не зависящем потоке.
...
Рейтинг: 0 / 0
29.11.2007, 17:36:09
    #34975946
Павел. С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание планировщика.
blinded Павел. С
Т.е. весь функционал по планированию должен быть реализован в нем.
Вы меня конечно извините, но функционал планирования ИМХО должен быть реализован в отдельном ни от кого не зависящем потоке.

Возможно я не совсем правильно выразился.

Хочется сделать вот что:

1 (!) поток. Периодически смотрит в базу на предмет заданий. Если нашел подходящее задание - принимается за выполнение. Затем опять в цикл - ждать новых заданий.
...
Рейтинг: 0 / 0
29.11.2007, 17:47:37
    #34976005
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание планировщика.
А если одно залание на закончили, а другое уже пора начинать?
...
Рейтинг: 0 / 0
29.11.2007, 18:20:54
    #34976157
Павел. С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание планировщика.
blindedА если одно залание на закончили, а другое уже пора начинать?

То сразу же браться за самое "старое" (то, которое надо было начать раньше всех, если заданий на выполнение несколько). И ругаться в лог, чтобы графики сдвигали, мол такие то задания в конфликте.
...
Рейтинг: 0 / 0
29.11.2007, 18:33:05
    #34976209
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание планировщика.
Во первых, я так и не понял чем не устраивают внешние планировщики? У тебя уже есть либо крон под *никсами, либо шедулер под виндами. Повесь в них запускалку своего отчетного модуля и все.
Во вторых, собственный планировщик тоже очень простая вещь - вешаешь процесс который сидит и ждет когда часы пробьют "двенадцать" и запускает очередное задание. Плюс к этому он в пустой период должен каждые цать секунд просыпаться и проверять список заданий, вдруг новое юзер задание создал или старое запретил. Элементарно до ужаса.
...
Рейтинг: 0 / 0
29.11.2007, 18:40:29
    #34976226
Павел. С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание планировщика.
White OwlВо первых, я так и не понял чем не устраивают внешние планировщики? У тебя уже есть либо крон под *никсами, либо шедулер под виндами. Повесь в них запускалку своего отчетного модуля и все.
Во вторых, собственный планировщик тоже очень простая вещь - вешаешь процесс который сидит и ждет когда часы пробьют "двенадцать" и запускает очередное задание. Плюс к этому он в пустой период должен каждые цать секунд просыпаться и проверять список заданий, вдруг новое юзер задание создал или старое запретил. Элементарно до ужаса.

Внешние планировщики не устраивают вот чем:
1) Необходимо иметь какой-либо интерфейс взаимодействия с ними. Изменять КронТаб в никсах, либо как-то работать с Win шедулером (COM?).
2) Что может делать крон/шедулер? запускать процесс? Это нужно где-то еще хранить бинарник, писать к нему пути и.т.д.
3) Не будет статистики по загруженности.
4) Задачи параллельно нельзя выполнять. Нужно, например, чтобы один отчет сделался в 12:00, а за ним в 12:15 следующий, качественно другой. Еще я не хочу стобы в БД в пике нагрузки было много соединений.

Планируется в день до 20ти заданий всего. На каждое уходит 2-5 секунд + задержки, если надо по почте слать.

На мой взгляд не так уж это и элементарно. Мне в голову до сих пор не пришла нормальная идея по реализации.
...
Рейтинг: 0 / 0
29.11.2007, 19:03:03
    #34976287
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание планировщика.
Странный народ, все велосипеды изобретает... Делаешь так - сервис отчетов, с пулом соединений и пр. у него входная очередь на обработку, он только за ней и смотрит. Из cron/sceduler пихаешь задание на построение отчета в очередь и умираешь, аж сервис по мере возможности трудится
...
Рейтинг: 0 / 0
29.11.2007, 21:09:06
    #34976515
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание планировщика.
Павел. СВнешние планировщики не устраивают вот чем:
1) Необходимо иметь какой-либо интерфейс взаимодействия с ними. Изменять КронТаб в никсах, либо как-то работать с Win шедулером (COM?).Зачем??? Внешний тем и хорош, что никакого интерфейса для управления им писать не нужно. Этот интерфейс уже написан. И юзера уже умеют с ним обращаться.
Павел. С2) Что может делать крон/шедулер? запускать процесс? Это нужно где-то еще хранить бинарник, писать к нему пути и.т.д.И что? Это проблема?
Павел. С3) Не будет статистики по загруженности.Почему??? Ты можешь вести статистику либо в запускалке, либо в самом модуле генерирующем отчет.
Павел. С4) Задачи параллельно нельзя выполнять. Нужно, например, чтобы один отчет сделался в 12:00, а за ним в 12:15 следующий, качественно другой.А это-то с чего вдруг проблемой стало? Или ты думаешь что крон с шедулером только по одной задаче за раз запускать могут? :)
Павел. СЕще я не хочу стобы в БД в пике нагрузки было много соединений.Тоже совершенно не проблема. У тебя модуль генерации отчета будет подключаться к базе? Ну пусть сервер БД и следит чтобы к нему одновременно приходили не более чем цать клиентов, а отчетный модуль если получит ошибку коннекта "слишком много пользователей" пусть подождет чуток и снова попробует присоединиться.

Павел. СНа мой взгляд не так уж это и элементарно. Мне в голову до сих пор не пришла нормальная идея по реализации.Все элементарно.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Написание планировщика. / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]