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

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

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

24 ответов

8 просмотров

мы пользуемся 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
У меня есть мобильное приложение, и надо проверять...

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

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта