【发布时间】:2011-05-27 07:45:03
【问题描述】:
我正在使用delayed_job 在我的rails 应用程序上运行一些后台进程。这些进程读取和写入数据库以及写入日志文件。
我的问题是 - 当我停止作业时,它会终止进程(最终会损坏我的数据)还是等待作业结束或类似的事情?
【问题讨论】:
我正在使用delayed_job 在我的rails 应用程序上运行一些后台进程。这些进程读取和写入数据库以及写入日志文件。
我的问题是 - 当我停止作业时,它会终止进程(最终会损坏我的数据)还是等待作业结束或类似的事情?
【问题讨论】:
这完全取决于您如何编写代码。
一般来说,杀死一个工作会在你的代码中插入插件并且它会立即停止。这可能是在写入过程中或在缓冲区被刷新或文件被正常关闭之前。
如果您有必须完成的任务,您可以捕获信号。然后,您的代码可以选择忽略信号并继续运行,这不是最佳解决方案,或者它可以开始正常关闭、刷新缓冲区、关闭数据库连接、关闭文件等,然后退出。
而且,忽略信号不好的原因是操作系统会发送一些信号来告诉应用程序在系统关闭或重新启动之前关闭。不关闭的应用程序可能会让用户或系统管理员生气,然后他们会想办法让它退出,很可能是以一种不优雅的方式。
查看Signal 了解更多信息。
【讨论】: