Chef 脚本资源:用户上下文如何工作?
Chef script ressource: how does the user context work?
我正在尝试以非 root 用户身份(特别是使用 nginx 用户)使用 Chef 12 安装 pm2 和 pm2-logrotate
我全局安装了pm2
[root@~] npm install -g pm2
然后我将 pm2 启动脚本注册到 运行 作为 nginx 用户
[root@~] pm2 startup -u nginx --hp /home/nginx systemd
然后我想为pm2进程安装pm2-logrotate 运行ning作为nginx用户
以下工作: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] Calling [NPM] to install pm2-logrotate@2.4.0 ...
==> default: Error: EACCES: permission denied, 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
我正在尝试以非 root 用户身份(特别是使用 nginx 用户)使用 Chef 12 安装 pm2 和 pm2-logrotate
我全局安装了pm2
[root@~] npm install -g pm2
然后我将 pm2 启动脚本注册到 运行 作为 nginx 用户
[root@~] pm2 startup -u nginx --hp /home/nginx systemd
然后我想为pm2进程安装pm2-logrotate 运行ning作为nginx用户
以下工作: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] Calling [NPM] to install pm2-logrotate@2.4.0 ... ==> default: Error: EACCES: permission denied, 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