Как сделать алгоритм, выполняющий команду в определенное время?
Доброго времени.
Имеется следующая задача:
Принимаем от пользователя значения часов, например 10:30, 19:00. Значения часов может быть одно, может быть несколько. Также пользователь указывает часовой пояс + 3 от UTC, к примеру
Необходимо сделать рассылку определенной информации пользователю именно в указанное время. Пользователей может быть много.
Пока я понял, что надо в отдельной таблице в БД хранить часовые пояса, как отклонения от UTC в секундах, +3 это 3*60*60 = 10800 сек.
И в отдельной таблице хранить ID пользователей и отклонения от 00:00 в секундах, к примеру для 10:30, это будет 10*60*60 + 30*60 = 37800 секунд.
Какой сделать алгоритм запуска команды по отправке информации?
Самый простой вариант, но и самый ненадежный:
В 00:00 по UTC делаем запуск команды через 10800 + 37800 = 48600 сек.
То есть запускаем функцию, где есть пауза 48600 сек и затем исполнение команды. Любой перезапуск скрипта или сервера приведет к неотправке сообщений.
Кто знает подскажите алгоритм словами, или какие то библиотеки Python. Если непонятно и сложно объяснил - пишите вопросы.
Время стоит хранить в Unix time. Получили от пользователя часы и его пояс, сразу перевели в timestamp, сохранили целое число.
Как отправлять. Есть системные механизмы, например cron в Linux. Можно попробовать сделать свой велосипед по мотивам: в общем это бесконечный цикл, который смотрит, не пора ли что-ньть сделать «сейчас».
Так и так в секундах хранится же? Просто unix time это конкретная дата, а отправлять нужно каждый день в одно и то же время (забыл написать это), из-за этого сохраняю количество секунд от 00:00.
Вот я про "свой велосипед" и хочу понять, как лучше его сделать :)
Предполагаю сейчас, нужен cron каждые 5 минут или лучше 1 минуту, и если есть в БД нужное время, дергать ID пользователя, и отправлять ему сообщение.
AlmazKayum, cron не так работает, ты ему явно задаешь время или диапазон и в это время он выполнит команду никаких доп проверок на время там уже делать не нужно
Влад Григорьев, я пользовался cron примерно представляю. Он просто запускает команду bash в определенное время, какое ему укажешь, например каждые 5 минут. В моем случае скрипт python