2012-04-04 3 views
0

Ruby 스크립트에서 서버로 sftp하고 일부 명령을 실행하는 방법이 있습니까?Ruby를 사용하여 원격 서버에서 쉘 명령을 실행하려면 어떻게해야합니까?

여기 내 스크립트입니다

Net::SFTP.start(IP_ADDRESS, 'root', :keys => ["/Users/user/.ssh/id_rsa"]) do |sftp| 
    sftp.mkdir! "/srv/new_dir" 
    sftp.dir.foreach("/srv/crm/current") do |entry| 
     puts entry.longname 
     sftp.file.open("/srv/new_dir", "w") do |f| 
     f.puts entry 
     end 
    end 
end 

는 기본적으로 나는 서버에 SFTP 및 새 폴더에 폴더를 복사하려고 내가 아파치를 다시 시작하고 싶습니다. 시도 :

FileUtils::sudo "/etc/init.d/apache2 reload" 

하지만 작동하지 않습니다. 내가 뭘 잘못하고 있는지, 아니면 이것이 가능한지에 대한 아이디어가 있습니까?

답변

1

파일 전송을 실제로 수행하지 않으므로 SFTP를 사용해야 할 필요가 없다고 생각합니다. Net::SSH을 사용하여 간단히이 스크립트를 다시 작성할 수 있습니다. 그런 다음 쉘에 대한 일반적인 액세스 권한이 있으며 Apache 명령은이 프로세스의 또 다른 단계 일뿐입니다.

0

나는 Capistrano으로 할 것입니다.

UPDATE :

카피 스트라 노를 레일 응용 프로그램을 배포하기 위해 설계,하지만 당신은 원격 시스템을 관리하는 도구로 사용할 수 있습니다. 간단한 방법으로 작업을 완료 할 수 있습니다.

는이 같은 Capfile가 있다고 가정 :
desc "sample recipe" 
task :sample do 
    Dir.glob('**/*') do |f| 
     upload f, "tmp/#{f}" 
    end 
    run 'ls -lr' 
end 

role :app, "host name or ip" 
set :user, "user_name" 

그런 다음 당신이 어떤 명령을 파일을 업로드 및 실행 cap sample를 실행할 수 있습니다.

과도 할 수도 있지만 Net API를 사용하는 것보다 훨씬 쉽습니다.

+1

당신은 스크립트를 바꾸겠습니까 ... capistrano ....를 사용하려면 어떻게해야합니까? cap은 레일 애플리케이션을 배포하는 것입니다. – Trace

관련 문제