Sudo qualquer comando lança: Comando não encontrado, mas funciona sem sudo

3

Estou em um VPS do CentOS e usando o RVM e o Capistrano para implantar. para algumas implantações eu preciso usar o sudo, mas quando eu implantar com algo como:

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

Eu recebo: sudo: bundle: command not found . isso acontece mesmo se eu o executar manualmente através do SSH. Eu corro tudo isso sob um usuário não root com privilégios sudo e grupo raiz.

Meu arquivo de sudoers é como:

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

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

Eu tentei alterar secure_path para:

/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

Isso faz com que a parte bundle exec funcione, mas agora diz sudo: cd: command not found

Não sei o que fazer neste momento, alguém sabe por quê?

    
por user23392 19.03.2013 / 22:23

1 resposta

0

cd não é um executável; é um shell embutido, portanto, o cd: command not found . Você também não está citando o comando sudo completo, por isso sudo está executando apenas a parte antes do && . Tente isto:

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

Você pode substituir sh pelo shell que preferir ou usar $SHELL se estiver definido.

    
por 19.03.2013 / 23:22

Tags