169 похожих чатов

Имеется приложение на phoenix, нужно раз в день запускать задачу.

Как это правильно сделать? Добавить Task с задержкой 24 часа? Или лучше по крону запускать как-то?

24 ответов

3 просмотра

мы пользуемся 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

Anastasiya Dyachenko
genserver + timeout

Очень ненадёжно... Для 24 часового таймаута не подходит

Lama Lover
Очень ненадёжно... Для 24 часового таймаута не под...

а какое разница какая длина таймаута? ну если важно именно в конкретное время запускать и обязательно только один раз в день то да, а если пофиг и главное чтобы хотя бы раз в день запускалось - сойдет

Anastasiya Dyachenko
а какое разница какая длина таймаута? ну если важн...

Так оно для "хотя бы раз в день" тоже не подходит Вот у тебя родительский супервизор упал (или рестартнул твой генсервер по стратегии one_for_all) и ты уже опять шлёшь себе новое сообщение и ждёшь 24 часа

Lama Lover
Так оно для "хотя бы раз в день" тоже не подходит ...

хотя бы раз в день = если больше одного раз в день то пофиг

Developer- Автор вопроса
Alex Bubnov
на рестарте делаешь и ставишь таймер

Тогда при каждом рестарте срабатывать будет, а надо раз в день

Lama Lover
Что?

на рестарте отрабатываешь таск и ставишь таймер на следующий. выходит "хотя бы раз в сутки".

Alex Bubnov
на рестарте отрабатываешь таск и ставишь таймер на...

Отличная тема Когда в таске будет баг, положешь всё приложение из-за ежесекундного рестарта

S̴e͘r͝gei̢ Zobov 𓆏
ets

ets обнулится если процесс упадет

Developer
Тогда при каждом рестарте срабатывать будет, а над...

давай ты расскажешь, что за таск, чтобы было проще рассуждать

Developer- Автор вопроса
Alex Bubnov
давай ты расскажешь, что за таск, чтобы было проще...

У меня есть мобильное приложение, и надо проверять статус подписок у юзеров, убирать тех кто отписался, думаю делать это раз в день

Developer
У меня есть мобильное приложение, и надо проверять...

ну из описания не видно почему обязательно только один раз в день, тут как раз неплохо бы делать обновление на каждый рестарт, но на ваше усмотрение конечно)

Похожие вопросы

Обсуждают сегодня

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
Тут кста кто-нибудь NeoVim использует?
Simple Sorcerer
13
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
А дальше что?.. Записать в файл, потом в Код?.. И потом разбирать как-то?..
Хаскель Моисеевич Гопник
14
доброго времени. db, dw и прочие исполняются при трансляции или при выполнении программы?
lutayyy
10
Почему никто не подсказал, что можно объявить свои типы данных, в которых меньше полей, чем в отданном джейсоне, и добавлять их по необходимости?
Strange Rabbit
10
Хтось використовував Vapor на Windows?
Jaroshevskii
15
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Карта сайта