Chef脚本资源:用户上下文如何工作?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Chef脚本资源:用户上下文如何工作?相关的知识,希望对你有一定的参考价值。

我正在尝试以非root用户身份安装pm2和pm2-logrotate(具体来说,使用nginx用户),使用Chef 12

我在全球安装了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'

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

答案

问题是,当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

以上是关于Chef脚本资源:用户上下文如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

如果该源文件存在,如何编写Chef配方来复制文件? only_if后卫不工作

如何使用 Chef 配方设置环境变量?

如何使用 Chef 12 分发 ssh 密钥

Chef windows_service资源 - 配置现有服务

Chef是一个什么样的工具

安装 Postgresql 时 AWS Opsworks Chef 配方失败