【问题标题】:Can stopping a daemon corrupt my data?停止守护进程会破坏我的数据吗?
【发布时间】:2011-05-27 07:45:03
【问题描述】:

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

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

【问题讨论】:

    标签: ruby daemons


    【解决方案1】:

    这完全取决于您如何编写代码。

    一般来说,杀死一个工作会在你的代码中插入插件并且它会立即停止。这可能是在写入过程中或在缓冲区被刷新或文件被正常关闭之前。

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

    而且,忽略信号不好的原因是操作系统会发送一些信号来告诉应用程序在系统关闭或重新启动之前关闭。不关闭的应用程序可能会让用户或系统管理员生气,然后他们会想办法让它退出,很可能是以一种不优雅的方式。

    查看Signal 了解更多信息。

    【讨论】:

    • 通过设计你的工作,让一切要么全有,要么全无,阅读“事务性”,可以优雅地解决这个问题。
    • @hurican:当被杀死的守护进程不支持事务时,使客户端软'trasactional'没有用。因此,问题是他的数据库是否支持事务。
    猜你喜欢
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多