我有13台运行Jenkins从站的Windows服务器。由于某些原因(Windows更新?),Jenkins从属设备会定期退出工作,并且需要重新启动Jenkins从属服务。如果我手动SSH到计算机(cygwin ssh服务器正在运行),则只需键入:
net stop "Jenkins Slave" net start "Jenkins Slave"
这(几乎)总是可以解决问题。
所以我写了一个Ruby脚本来自动化它。
这里是:
#!/usr/bin/env ruby require 'rubygems' require 'net/ssh' USER = 'Administrator' PASS = 'PASSWORD' hosts = [:breckenridge, :carbondale, :crestone, :denali, :gunnison, :sneffels, "mammoth", "whitney", "snowmass", "firestone", "avon", :grizzly, :silverton] hosts.each {|host| puts "SSHing #{host} ..." Net::SSH.start( HOST, USER, :password => PASS ) do |ssh| puts ssh.exec!('net stop "Jenkins Slave"') puts ssh.exec!('net start "Jenkins Slave"') puts "Logging out..." end }
该脚本在所有计算机上执行,我看到该服务已启动的输出。但是,这 永远 行不通。当我ssh返回机器时,该服务尚未启动。
可悲的是,我不能使用Linux-我无法控制这些机器。
关于为什么手动执行SSH起作用但脚本不起作用的任何想法?
谢谢菲尔
我在Pry中进行了尝试,发现了两个问题:
host
STRING
.to_s
另外,我将其切换为惯用的Ruby模式,即do...end当一个块超出1行时使用。
do...end
hosts.each do |host| puts "SSHing #{host} ..." Net::SSH.start( host.to_s, USER, :password => PASS ) do |ssh| puts ssh.exec!('date') puts "Logging out..." end end
我在Pry中对此进行了测试,现在可以使用了。我希望这有帮助。