【问题标题】:delayed job process running as root on ubuntu在 ubuntu 上以 root 身份运行的延迟作业进程
【发布时间】:2012-06-01 05:52:23
【问题描述】:

我有一个使用Delayed Job Gem 运行后台任务的Rails 站点。后台任务获取 PDF 并将其转换为一系列图像。

Rails 应用程序以“nobody”身份运行,延迟的作业流程以“root”身份运行。

后台任务运行正常,但是当 Rails 应用程序尝试删除由延迟作业进程创建的文件时出现问题:我收到“权限被拒绝”消息。所以'nobody'不能删除'root'创建的文件。

如果我将文件/文件夹权限设置为:

    chmod -R 755 

但这不会影响新文件。

我正在 root 帐户下使用 Capistrano 部署我的 Rails 应用程序。

作为 linux 系统管理员,我是个菜鸟。你能建议我哪里出错了吗?

非常感谢

【问题讨论】:

  • 我更喜欢使用名为 rails 的同一用户(或 www,或其他任何名称)运行我的 rails 应用程序和延迟作业。您可以使用 set :user 'username' 告诉 capistrano 与您想要的用户一起部署,我认为延迟的作业与安装 gem 的用户一起运行。
  • 啊,“延迟作业与安装 gem 的用户一起运行”很有用,我必须对此进行调查,并尝试让事情在不同的帐户下工作。

标签: ruby-on-rails linux delayed-job file-permissions


【解决方案1】:

delayed_job 提供了自己的 Capistrano 配方,应该能够使用与您的应用相同的用户来启动/停止服务器。您基本上只需要在您的deploy.rb 文件中输入require "delayed/recipes"。然后您可以使用cap delayed_job:startcap delayed_job:stop 远程启动/停止delayed_job。

更多信息on the wiki

【讨论】:

  • 是的,我在部署时使用了这个秘籍,但它在 root 帐户下运行 'delayed_job' 进程。
【解决方案2】:

所以我按照水手的建议解决了我的问题:基本上设置一个新用户来运行应用程序和部署。不确定这是否对其他人有用,但这是我将网站转移给其他用户的方式:

步骤

  1. 创建一个名为“www”的新用户

    useradd -d /home/www -m
    passwd www
    
  2. 让 www 控制现有文件:

    cd /path/to/site
    chmod -R g+ws *
    chgrp -R www *
    
  3. 杀死根账户下现有的delayed_job进程

  4. 更新了站点虚拟主机以告诉乘客以哪个用户身份运行

    PassengerDefaultUser  www
    
  5. 告诉 cap 在 deploy.rb 中使用用户 www 进行部署

    set :user, "www"
    

现在延迟的作业流程和站点流程以“www”运行,这解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 2019-03-12
    相关资源
    最近更新 更多