Добрый день. Есть потребность автоматического перевода задания из одного статуса в другой при истечении некоторого времени. Вопрос заключается в том, где это должно осуществляться и кто должен мониторить. Рассматриваемые варианты:
1. На каждый хинт в сервисе при запросе задания делать проверки. Тяжело отслеживать, т.к. может запрашиваться массив заданий и получается, что бизнес-логика протекает или размазывается на репозиторий.
2. Выделить в отдельный воркер, который будет запускать задания с переодичностью, но тут есть вероятность попасть в интервал запуска задания.
Может кто подскажет вариант или более правильное решение?
Автоматическое изменение состояния
Re: Автоматическое изменение состояния
Как нивелировать проблемы интервалов запуска задачи по крону? Просто уменьшить периодичность или же есть другие тактики?
Re: Автоматическое изменение состояния
Код: Выделить всё
* * * * * www-data /usr/bin/flock -xn /var/lock/my_work.lock -c '/var/www/yii my/work >/dev/null'
Re: Автоматическое изменение состояния
Я тоже использовал файловую блокировку для защиты от параллельного запуска.
Получился такой bash-скрипт, вызывается по крону.
Получился такой 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<&-