须藤抛出:未找到命令,但无需 sudo 即可运行

须藤抛出:未找到命令,但无需 sudo 即可运行

我在 CentOS VPS 上并使用 RVM 和 Capistrano 进行部署。对于某些部署,我需要使用 sudo,但是当我使用类似以下命令进行部署时:

desc "Restart the application services"
task :restart, :roles => :app do
  run "#{sudo} cd #{current_path} && bundle exec foreman export upstart"
end

我得到:sudo: bundle: command not found。即使我通过 SSH 手动运行它,也会发生这种情况。我在具有 sudo 权限和 root 组的非 root 用户下运行所有​​这些。

我的 sudoers 文件如下:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

root    ALL=(ALL)    ALL
deploy  ALL=(ALL)  ALL

我尝试改为secure_path

/usr/local/rvm/gems/ruby-1.9.3-p392/bin:/usr/local/rvm/gems/ruby-1.9.3-p392@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p392/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rvm/bin:/root/bin

这样做可以使bundle exec部件工作,但现在它说sudo: cd: command not found

我不知道现在该做什么,有人知道为什么吗?

答案1

cd不是可执行文件;它是 shell 内置的,因此cd: command not found。您也没有引用完整sudo命令,因此sudo仅运行 之前的部分&&。试试这个:

desc "Restart the application services"
  task :restart, :roles => :app do
    run "#{sudo} sh -c 'cd #{current_path} && bundle exec foreman export upstart'"
  end
end

您可以sh用您喜欢的任何 shell 进行替换,或者使用$SHELL已设置好的 shell。

相关内容