Как это правильно сделать? Добавить Task с задержкой 24 часа? Или лучше по крону запускать как-то?
мы пользуемся gen_worker https://github.com/Kr00lIX/gen_worker
quantum нормально работает Task или просто процесс, выполняющий работу, может упасть как-нибудь и не выполнить таску Лучше всего хранить mfa задачи и время следующего исполнения в каком-нибудь хранилище (типа ets или dets)
https://blog.kommit.co/3-ways-to-schedule-tasks-in-elixir-i-learned-in-3-years-working-with-it-a6ca94e9e71d
системный cron - в общем случае антипаттерн. лишняя точка отказа, зависимость от timezone сервера итп
genserver + timeout
Очень ненадёжно... Для 24 часового таймаута не подходит
а какое разница какая длина таймаута? ну если важно именно в конкретное время запускать и обязательно только один раз в день то да, а если пофиг и главное чтобы хотя бы раз в день запускалось - сойдет
Так оно для "хотя бы раз в день" тоже не подходит Вот у тебя родительский супервизор упал (или рестартнул твой генсервер по стратегии one_for_all) и ты уже опять шлёшь себе новое сообщение и ждёшь 24 часа
хотя бы раз в день = если больше одного раз в день то пофиг
на рестарте делаешь и ставишь таймер
Тогда при каждом рестарте срабатывать будет, а надо раз в день
на рестарте отрабатываешь таск и ставишь таймер на следующий. выходит "хотя бы раз в сутки".
тебе нужно exactly once?
Отличная тема Когда в таске будет баг, положешь всё приложение из-за ежесекундного рестарта
ets обнулится если процесс упадет
это уже другой вопрос
давай ты расскажешь, что за таск, чтобы было проще рассуждать
У меня есть мобильное приложение, и надо проверять статус подписок у юзеров, убирать тех кто отписался, думаю делать это раз в день
ну из описания не видно почему обязательно только один раз в день, тут как раз неплохо бы делать обновление на каждый рестарт, но на ваше усмотрение конечно)
Обсуждают сегодня