Когда мы перезапускаем или развертываем, мы получаем несколько заданий Resque в неудавшейся очереди с Resque::TermException (SIGTERM)
или Resque::DirtyExit
.Восстановление из Resque :: TermException или SIGTERM на Heroku
Мы используем в нашей PROCFILE новый TERM_CHILD=1 RESQUE_TERM_TIMEOUT=10
поэтому наш работник линия выглядит следующим образом:
worker: TERM_CHILD=1 RESQUE_TERM_TIMEOUT=10 bundle exec rake environment resque:work QUEUE=critical,high,low
Мы также используем resque-retry
, который я думал, что мощь автоматического повтора этих двух исключений? Но, похоже, этого не происходит.
Так что я думаю, два вопроса:
- Мы могли бы вручную спасти от
Resque::TermException
в каждой работе, и использовать это, чтобы перенести работу. Но есть ли чистый способ сделать это для всех рабочих мест? Даже патч обезьяны. - Не следует повторно повторять попытку повторного повтора? Можете ли вы подумать о какой-либо причине, почему это не так?
Спасибо!
Редактировать: Получение всех рабочих мест за менее чем 10 секунд кажется необоснованным по шкале. Кажется, должен быть способ автоматически переупорядочить эти задания при выполнении исключения Resque :: DirtyExit.
Upvoted и принято - я честно не уверен, что если мы можем получить их все менее чем за 10 секунд, хотя. У нас есть большой экспорт и т. Д., Которые должны сгенерировать один файл. Re-enqueueing кажется, что он решает это, хотя? Вы можете поделиться тем, что разница между 'Resque :: TermException' и' Resque :: DirtyExit'. У меня есть спасение для 'Resque :: DirtyExit', но оно, похоже, не всегда перезаписывается. Благодаря! –
Как обновление, они странно не спасают эти исключения чисто, иногда, несмотря на то, что в задании выполнено спасение Resque :: DirtyExit. Я не мог понять, почему. Это делает нашу работу ненадежной, поскольку мы все еще находим ее в неудавшейся очереди с исключениями Resque :: DirtyExit. Это действительно становится проблемой. –
Может ли кто-нибудь порекомендовать, как рабочий должен обрабатывать SIGTERM внутри рабочего, чтобы рабочий мог полностью закрыться? Например, должен ли (resque) рабочий также захватить SIGTERM и установить некоторую переменную, которую периодически проверяет код цикла? Я предполагаю, что исключение TermException или DirtyException рельсовое только после RESQUE_TERM_TIMEOUT secnds. –