我有一批Backburner工人(Backburner::Workers::Simple
)。我似乎遇到了一个极端的情况,即工人偶尔无法建立数据库连接,服务器重新获得了工作,突然工人哭了起来,迅速保留了工作,所有这些都超时了,最终被埋葬,因为工作人员再也无法成功获得数据库连接。显然,如果能够解决数据库连接和快速启动作业保留的怪异问题,那将是理想的选择。不过,这似乎是一个较长期的解决方案,因为我已经看过并且看不到任何明显的东西。我想做的只是让我的错误处理程序记录错误,然后让整个工作进程死掉。我所有的工作人员都在流程监督下,因此这是一种非常干净,简单的方法,可以使新工作人员没有数据库问题。我尝试将; Kernel.exit
(及其变体)添加到我的on_error
lambda中,但这似乎没有什么不同。我如何做到这一点?
答案 0 :(得分:1)
如果需要彻底杀死工人,无论如何,您可以使用system()
从ruby调用命令行以运行kill
命令。
因此,您只需要获取工作程序的PID,然后从系统调用中将其杀死
system("kill -QUIT #{worker.pid}")
看看如何获取工作程序的PID,我从backburner存储库中获得了this information,看来您可以使用以下方法从工作程序中获取PID:
Process.pid