@mt_max

Как выключать/включать cron задачи используя python?

Добрый день, ситуация следующая: имеется web приложение на flask для добавления номеров телефона в бд. В cron есть скрипты которые рассылают смс по номерам из базы.
0 9 * * 1 /home/xxx/yyy/mes.py -monday >> /home/xxx/dispatch.log
0 9 * * 3 /home/xxx/yyy/mes.py >> /home/xxx/dispatch.log
0 9 * * 5 /home/xxx/yyy/mes.py >> /home/xxx/dispatch.log

Необходимо реализовать кнопку в web приложении которая будет "включать/выключать" рассылку, например когда количество смс начинает превышать допустимые лимиты. Как грамотней организовать данную задачу? Есть идея в базе сделать еще одну таблицу и туда писать булевские значения, в скриптах брать последнюю строку смотреть что там true/false и в зависимости от этого рассылать не рассылать, но смущает что в таблице будет куча ненужных строк, а по факту нужное состояние будет только в последней.
  • Вопрос задан
  • 201 просмотр
Пригласить эксперта
Ответы на вопрос 3
tumbler
@tumbler Куратор тега Python
бекенд-разработчик на python
Пишите в одну и ту же строку, если смущает куча ненужных.
Ответ написан
Комментировать
@Kirill-Gorelov
С ума с IT
Я тут вижу два решения.
1. в питоне есть возможность управления консолью из скриптов. ОТдельно пишешь функцию, которая будет выполнять запрос к консоли. Но это вариант, так себе.
2. В современных практиках разработки обычно делают так. Не сам крон запускает рассылку. А крон запускает функцию, которая проверят задачи на рассылку. Если задачи есть, то запускается сама рассылка. Что значит - задачи на рассылку. Либо у тебя есть промежуточная таблица где ты хранишь список того что нужно отправить(вариант тоже так себе, как по мне). Или у адреса хранить значение отправлен или нет
Или третий вариант, как ты предложил, отдельно хранить значение true/false.
Ответ написан
@pfg21
ex-турист
классически "труюниксвей" это делается через sed awk и прочую регекспину. она ищет в файле строчку и ставит перед ней # и наоборот.

вариант2: содержимое кронтаба держать в бд и при каждом изменении полностью генерировать /etc/crontab с нужными включенными задачами

вариант3: рассовать правила в отдельные файлы в директории etc/cron.d/ и для удаления перемещать их в какуюнить другую диру и обратно.
минус: поддержка cron.d есть не везде.

вариант4: если есть системд то воспользоваться systemd.timer, там желаемые функции уже встроены в систему.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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