Страница 1 из 1

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

Добавлено: 2017.06.23, 12:15
vuylov.d
Добрый день. Есть потребность автоматического перевода задания из одного статуса в другой при истечении некоторого времени. Вопрос заключается в том, где это должно осуществляться и кто должен мониторить. Рассматриваемые варианты:
1. На каждый хинт в сервисе при запросе задания делать проверки. Тяжело отслеживать, т.к. может запрашиваться массив заданий и получается, что бизнес-логика протекает или размазывается на репозиторий.
2. Выделить в отдельный воркер, который будет запускать задания с переодичностью, но тут есть вероятность попасть в интервал запуска задания.
Может кто подскажет вариант или более правильное решение?

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

Добавлено: 2017.06.23, 12:50
ElisDN
По cron.

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

Добавлено: 2017.06.23, 13:31
slavcodev
Queue with delayed tasks.

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

Добавлено: 2017.06.23, 14:32
vuylov.d
Как нивелировать проблемы интервалов запуска задачи по крону? Просто уменьшить периодичность или же есть другие тактики?

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

Добавлено: 2017.06.23, 18:52
ElisDN

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

* * * * * www-data /usr/bin/flock -xn /var/lock/my_work.lock -c '/var/www/yii my/work >/dev/null'

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

Добавлено: 2017.06.30, 08:51
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<&-