Могу ли я сделать обработчик ошибок для backburner работника просто убить рабочий процесс - PullRequest
0 голосов
/ 31 августа 2018

У меня есть парк работников Backburner (Backburner::Workers::Simple). Кажется, я столкнулся с крайним случаем, когда работник иногда не может получить соединение с БД, задание снова получает сервер, и вдруг работник разрывается, быстро резервируя рабочие места, все из которых истекает и в конце концов, его похоронят, потому что работник больше никогда не получит соединение с БД. Очевидно, было бы идеально, если бы я мог исправить странности вокруг соединений с БД и быстрого резервирования заданий. Это похоже на долгосрочное решение, потому что я посмотрел и не вижу ничего очевидного. То, что я хотел бы сделать, - это просто обработчик ошибок записать в журнал ошибку, а затем весь рабочий процесс умереть. Все мои работники находятся под наблюдением процессов, так что это очень простой и простой способ получить нового работника без проблем с БД. Я попытался добавить ; Kernel.exit (и варианты к нему) к моей on_error лямбде, но, похоже, это не имеет значения. Как мне это сделать?

1 Ответ

0 голосов
/ 11 сентября 2018

Если необходимо полностью убить работника, несмотря ни на что, вы можете позвонить в командную строку из ruby ​​с помощью system(), чтобы выполнить команду kill.

Так что вам просто нужно получить PID работника, а затем убить его из системного вызова

system("kill -QUIT #{worker.pid}")

глядя на то, как получить PID работника, я получаю эту информацию из репозитория backburner, и кажется, что вы можете получить PID от работника с помощью

Process.pid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...