[英]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.