0

我有一个运行 Ubuntu 12.04 的登台服务器,我正在 git 上创建一些接收后脚本,以自动部署我们保留在该服务器上的一些存储库。

我创建了一个无家可归的用户“git”(出于安全原因)来处理 git 的 ssh 连接。

当有人在 repo 上推送一些东西时,我想运行compass compile(指南针作为 ruby​​ gem 安装)。所以我使用 RVM 在该服务器上安装和管理 ruby​​。我使用多用户方法完成了所有 rvm 安装过程。当我使用 'git' 用户运行 ruby​​ -v 时,我得到了正确的输出,我的意思是,rvm 多用户安装几乎没问题。

问题是当我尝试运行一个可执行的 gem 时。

我注意到我的普通用户的 .bash_profile 有这个(由 rvm 添加):

[[ -s "/usr/local/rvm/scripts/rvm" ]] && source "/usr/local/rvm/scripts/rvm" # Load RVM into a shell session *as a function*

此代码将 gems 的 bin 目录添加到 $PATH。

[normaluser]$ echo $PATH
/usr/local/rvm/gems/ruby-1.9.2-p320/bin:/usr/local/rvm/gems/ruby-1.9.2-p320@global/bin:/usr/local/rvm/rubies/ruby-1.9.2-p320/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/rvm/gems/ruby-1.9.2-p320/bin/:/usr/local/rvm/bin

由于“git”用户无家可归,它没有 .bash_profile 所以我将该代码添加到 /etc/profile.d/ 上的脚本中

但它不起作用,因为每次我尝试以 git 执行 /usr/local/rvm/scripts/rvm 时,它都会退出 git 的 bash 会话并返回到我的正常用户会话。它类似于:

[normaluser]$ sudo -u git bash
[git]$ exec /usr/local/rvm/scripts/rvm
[normaluser]$ 

没有打印错误...

为什么 rvm 脚本从 bash 会话中退出?

如何在无家可归的用户上设置 rvm $PATH?

4

1 回答 1

0

三个问题:

  1. 你不应该使用/bin/sh它 RVM 不支持它,/bin/bash而是使用它(但你已经得到它
  2. 正如@Casper => exec 所解释的那样,用您运行的命令替换当前 shell,没有返回
  3. 有文档描述如何在init.d=> https://rvm.io/integration/init-d中使用 RVM

您不应该尝试在 shell 初始化文件中为用户获取 rvm,因为它们不被 init.d 脚本使用,而是使用包装器,这是使其工作的最可靠的方法。

于 2013-06-24T20:19:36.043 回答