【问题标题】:Rails 4 - how is the "/tmp" cleaned?Rails 4 - 如何清理“/tmp”?
【发布时间】:2016-05-07 16:08:20
【问题描述】:

我正在生成 PDF 文档并将其临时存储到 /tmp 目录。生成文档并将其存储在目录中后(我使用 Sidekiq 作为后台进程执行此操作),然后将其上传到 Amazon S3 并从 /tmp 目录中删除。

我注意到,当用户生成文档并且我正在将一些新代码部署到服务器(使用 Capistrano)时,生成/上传文档的过程被中断。

我想知道这是否与 Sidekiq 有关?它在 Ubuntu 上作为 Upstart 服务运行,所以我不这么认为。

然后我认为问题可能是我将文档存储在/tmp 目录中。目录是如何工作的?当我使用 Capistrano 进行新部署时,目录的全部内容会被删除吗?

编辑:

文档生成通常需要 5-10 秒,但队列是 default,所以可能会因为队列中的 default 进程太多而导致进程失败?

【问题讨论】:

  • /tmp 每次重启后都会清理目录。
  • `capistrano 为每个新部署的代码创建单独的文件夹
  • @illusionist 好的,所以当我开始生成文件时,它会保存到/tmp,在我开始部署代码的那一刻,这个/tmp 文件夹将变得无法访问应用程序,我我对吗?
  • uploads/tmp 现在将指向另一个 somrelease/public/uploads/tmp

标签: ruby-on-rails ruby capistrano sidekiq tmp


【解决方案1】:

/tmp 目录应该只在服务器启动期间被清理(正如@Зелёный 已经评论过的那样)。但是您的 PDF 生成/上传可能需要太长时间,并且该过程可能会被终止。这已记录在 here 中,我引用了文档:

sidekiqctl stop [pidfile] 60

这会发送 TERM,最多等待 60 秒,然后如果 Sidekiq 进程到那时还没有退出,它将杀死 -9。请记住,deadline timeout 是 sidekiqctl 在 Sidekiq 进程上运行 kill -9 之前等待的时间。

详细信息应在 capistrano 部署期间显示在控制台输出中,因此如果不是进程被杀死的情况,请将输出添加到问题中。

【讨论】:

  • 感谢@BoraMa,那么我能想到的解决方案是什么?我想我应该将创建 PDF 设置为最高优先级,对吧?因为现在,所有 Sikdeiq 进程都是default。另外,在将临时文件上传到 AWS S3 之前,我是否应该选择一个不同的目录来存储临时文件?或者实际上,/tmp 目录适合这个任务吗?
猜你喜欢
  • 1970-01-01
  • 2012-04-08
  • 2016-03-27
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多