【问题标题】:Chef script ressource: how does the user context work?Chef 脚本资源:用户上下文如何工作?
【发布时间】:2018-01-31 10:49:06
【问题描述】:

我正在尝试使用 Chef 12 将 pm2 和 pm2-logrotate 安装为非 root 用户(特别是使用 nginx 用户)

我全局安装了 pm2

[root@~] npm install -g pm2

然后我注册了pm2启动脚本以nginx用户身份运行

[root@~] pm2 startup -u nginx --hp /home/nginx systemd  

然后我想为作为 nginx 用户运行的 pm2 进程安装 pm2-logrotate

以下工作:pm2-logrotate安装正确,/home/nginx/.pm2/logs下的日志轮转

script "pm2_logrotate" do
  interpreter 'bash'
  code <<-EOH
    su nginx -c "pm2 install pm2-logrotate@2.4.0"
  EOH
end

但如果我尝试通过为脚本资源指定“nginx”用户来安装 pm2-logrotate,我会收到错误

script "pm2_logrotate" do
  interpreter 'bash'
  user "nginx"
  code <<-EOH
    pm2 install pm2-logrotate@2.4.0
  EOH
end

错误

[PM2][Module]调用[NPM]安装pm2-logrotate@2.4.0 ... ==> 默认:错误:EACCES:权限被拒绝,mkdir '/root/.pm2/modules/pm2-logrotate'

为什么会有不同的行为?谢谢

【问题讨论】:

    标签: npm permissions chef-infra centos7 pm2


    【解决方案1】:

    问题在于,当 Chef 将用户更改为 nginx 时,它不会导出 bash 在启动时设置的一些环境变量,在这种情况下可能是 $HOME。您可以通过以下方式解决此问题:

    script "pm2_logrotate" do
      interpreter 'bash'
      user "nginx"
      environment 'HOME' => Dir.home(user)
      code <<-EOH
        pm2 install pm2-logrotate@2.4.0
      EOH
    end
    

    【讨论】:

    • 谢谢,我下周试试,我离开几天。
    猜你喜欢
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 2014-04-18
    相关资源
    最近更新 更多