簡體   English   中英

如何使用 Ruby 在遠程服務器上運行 shell 命令?

[英]How do I run shell commands on a remote server with Ruby?

Ruby 腳本中有沒有辦法通過 sftp 連接到服務器並運行一些命令。

這是我的腳本

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 連接到服務器並將一個文件夾復制到一個新文件夾中,我想重新啟動 apache。我試過這個:

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

但這是行不通的。 知道我做錯了什么,或者這是否可能?

由於您實際上並沒有進行任何文件傳輸,因此我認為您不需要使用 SFTP。 您可以簡單地使用Net::SSH重寫此腳本。 然后您可以正常訪問 shell,您的 Apache 命令只是此過程中的另一個步驟。

我會用Capistrano來做。

更新:

Capistrano 專為部署 Rails 應用程序而設計,但您可以將其用作管理遠程機器的工具。 使用簡單的食譜,您就可以完成工作。

假設你有一個像這樣的 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 容易得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM