Ruby, ausführen, linux-Befehle nacheinander per SSH und LOG alles

Will ich schreiben von code in Ruby-Hexe net::ssh, das ausführen von Befehlen eins zu eins auf remote-linux-Maschine, und melden Sie alles, was (genannten Befehl, stdout und stderr auf der linux Maschine).

Also Schreibe ich-Funktion:

  def rs(ssh,cmds)
    cmds.each do |cmd|
      log.debug "[SSH>] #{cmd}"
      ssh.exec!(cmd) do |ch, stream, data|    
        log.debug "[SSH:#{stream}>] #{data}"            
      end  
    end
  end

Zum Beispiel, wenn ich wollen zu erstellen, die auf remote-linux-neue Ordner und Datei: "./verylongdirname/anotherlongdirname/a.txt" und die Liste Dateien in diesem Verzeichnis nach, und finden firefox gibt es (das ist ein wenig dumm :P) also ich nenne die oben genannten Verfahren so:

Net::SSH.start(host, user, :password => pass) do |ssh|  

  cmds=["mkdir verylongdirname", \                                 #1
        "cd verylongdirname; mkdir anotherlongdirname, \           #2
        "cd verylongdirname/anotherlongdirname; touch a.txt", \    #3
        "cd verylongdirname/anotherlongdirname; ls -la", \         #4
        "cd verylongdirname/anotherlongdirname; find ./ firefox"   #5 that command send error to stderr.
        ]

  rs(ssh,cmds)   # HERE we call our function

  ssh.loop
end

After-run-code oben habe ich die volle LOG-Hexe Informationen über Ausführungen von Befehlen, die in Zeile #1,#2,#3,#4,#5. Das problem ist, dass der Staat auf linux -, zwischen execude Befehle aus der commands array, wird nicht gespeichert (so muss ich wiederholen, "cd" - Anweisung vor dem ausführen ordnungsgemäße Befehl). Und ich bin nicht zufrieden mit, dass.

Mein Zweck ist, um Befehle Tabellen so:

  cmds=["mkdir verylongdirname", \     #1
        "cd verylongdirname", \        
        "mkdir anotherlongdirname", \  #2
        "cd anotherlongdirname", \
        "touch a.txt", \               #3
        "ls -la", \                    #4
        "find ./firefox"]             #5

Wie Sie sehen, te Zustand zwischen jeden Befehl speichern auf dem linux-Rechner (und die wir nicht brauchen, wiederholen Sie die entsprechenden "cd" - Anweisung vor dem ausführen ordnungsgemäße Befehl). Wie zu ändern", rs(ssh commands)" Verfahren, es zu tun, und MELDEN Sie ALLES, was (comand,stdout,stdin) wie vorher?

InformationsquelleAutor Kamil Kiełczewski | 2011-07-24

Schreibe einen Kommentar