2010-12-17 61 views
2

我正在使用delayed_job在我的Rails应用程序上运行一些后台进程。这些进程读取和写入数据库以及写入日志文件。停止守护进程是否会破坏我的数据?

我的问题是 - 当我停止工作时,是否会终止进程(最终会破坏我的数据)还是等待作业结束或类似的事情?

回答

2

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

通常杀死一个作业会跳出代码上的插件,并立即停止。这可能在写入过程中或缓冲区被刷新或文件正常关闭之前。

如果您有要完成的任务,您可以捕获信号。然后,您的代码可以选择忽略信号并继续运行,这不是最佳解决方案,也可能会开始正常关闭,刷新缓冲区,关闭数据库连接,关闭文件等,然后退出。

而且,忽略信号的原因并不好,有些操作系统发送告诉应用程序在系统关闭或重新启动之前关闭。没有关闭的应用程序可能会让用户或系统管理员感到愤怒,然后谁会找到一种方式让它退出,很可能是以一种不正当的方式。

检查出Signal了解更多信息。

+1

通过设计你的工作的方式,使一切或全无,阅读“事务性”,可以解决这个问题,以优雅的方式。 – hurikhan77 2010-12-17 21:25:19

+0

@hurican:当杀死的守护进程不支持事务处理时,使客户端软'trasactional'没有用处。因此问题是他的数据库是否支持交易。 – 2011-01-08 21:32:31