Автоматическое изменение состояния

Обсуждаем, как правильно строить приложения
Ответить
vuylov.d
Сообщения: 9
Зарегистрирован: 2017.04.17, 15:51

Автоматическое изменение состояния

Сообщение vuylov.d »

Добрый день. Есть потребность автоматического перевода задания из одного статуса в другой при истечении некоторого времени. Вопрос заключается в том, где это должно осуществляться и кто должен мониторить. Рассматриваемые варианты:
1. На каждый хинт в сервисе при запросе задания делать проверки. Тяжело отслеживать, т.к. может запрашиваться массив заданий и получается, что бизнес-логика протекает или размазывается на репозиторий.
2. Выделить в отдельный воркер, который будет запускать задания с переодичностью, но тут есть вероятность попасть в интервал запуска задания.
Может кто подскажет вариант или более правильное решение?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Автоматическое изменение состояния

Сообщение slavcodev »

Queue with delayed tasks.
Жду Yii 3!
vuylov.d
Сообщения: 9
Зарегистрирован: 2017.04.17, 15:51

Re: Автоматическое изменение состояния

Сообщение vuylov.d »

Как нивелировать проблемы интервалов запуска задачи по крону? Просто уменьшить периодичность или же есть другие тактики?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Автоматическое изменение состояния

Сообщение ElisDN »

Код: Выделить всё

* * * * * www-data /usr/bin/flock -xn /var/lock/my_work.lock -c '/var/www/yii my/work >/dev/null'
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Автоматическое изменение состояния

Сообщение Nex-Otaku »

Я тоже использовал файловую блокировку для защиты от параллельного запуска.

Получился такой bash-скрипт, вызывается по крону.

Код: Выделить всё

#!/bin/bash
. ~/.bash_profile
PATH=(копируем сюда значение переменной окружения в обычной пользовательской сессии)

# Ставим блокировку.
# Проверяем, запущен ли скрипт. Если запущен, то выходим.
lockfile=/tmp/testing.lock
exec 9>$lockfile
flock -n 9 || exit 1

# Для имитации работы, будем выводить числа в консоль.
echo "started"
for i in 1 2 3 4 5; do
    echo "step $i"
    sleep 10;
done
wait
echo "finished"

# Снимаем блокировку.
9<&-
Ответить