Ruby 停止守护进程会损坏我的数据吗?

Ruby 停止守护进程会损坏我的数据吗?,ruby,daemons,Ruby,Daemons,我正在使用delayed_job在我的rails应用程序上运行一些后台进程。这些进程读取和写入数据库以及写入日志文件 我的问题是-当我停止作业时,它会杀死进程(最终会损坏我的数据)还是等待作业结束或诸如此类的事情?这一切都取决于您如何编写代码 一般来说,杀死一个作业会使你的代码中断,它会立即停止。这可能是在写的中间,或者在缓冲区被刷新或文件被优雅关闭之前。 如果你有必须完成的任务,你可以捕捉信号。然后,您的代码可以选择忽略该信号并继续运行,这不是一个最佳的解决方案,或者它可以开始优雅地关闭、刷新

我正在使用delayed_job在我的rails应用程序上运行一些后台进程。这些进程读取和写入数据库以及写入日志文件


我的问题是-当我停止作业时,它会杀死进程(最终会损坏我的数据)还是等待作业结束或诸如此类的事情?

这一切都取决于您如何编写代码

一般来说,杀死一个作业会使你的代码中断,它会立即停止。这可能是在写的中间,或者在缓冲区被刷新或文件被优雅关闭之前。 如果你有必须完成的任务,你可以捕捉信号。然后,您的代码可以选择忽略该信号并继续运行,这不是一个最佳的解决方案,或者它可以开始优雅地关闭、刷新缓冲区、关闭数据库连接、关闭文件等,然后退出

忽略信号不好的原因是,操作系统发送了一些信号,告诉应用程序在系统关闭或重新启动之前关闭。未关闭的应用程序可能会激怒用户或系统管理员,然后他们会找到方法让其退出,很可能是以一种不友好的方式


查看以了解更多信息。

通过将作业设计为“全部”或“无”的方式,阅读“事务性”,可以优雅地解决这一问题。@hurican:当被杀死的守护进程不支持事务时,将客户端设置为软“事务性”是没有用的。因此,问题是他的数据库是否支持事务。