2012-12-26 18 views
8

के साथ विंडोज़ में एसएसएच स्वचालित करना मेरे पास 13 विंडोज सर्वर जेनकिन्स गुलाम हैं। किसी कारण से (विंडोज अपडेट?), जेनकींस दास समय-समय पर काम करना छोड़ देते हैं और जेनकिन्स स्लेव सेवा को पुनरारंभ करने की आवश्यकता होती है। अगर मैं मैन्युअल रूप से मशीनों को SSH (cygwin ssh सर्वर चल रहा है) मैं बस टाइप करें:रूबी

net stop "Jenkins Slave" 
net start "Jenkins Slave" 

और इस (लगभग) हमेशा समस्या का हल।

इसलिए मैंने इसे स्वचालित करने के लिए रूबी लिपि लिखी।

यहाँ है:

#!/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 
} 

स्क्रिप्ट सभी मशीनों पर निष्पादित, मैं उत्पादन है कि सेवा शुरू कर दिया है देखते हैं। हालांकि, यह कभी काम करता है। जब मैं मशीन पर वापस भेजता हूं, तो सेवा शुरू नहीं हुई है।

अफसोस की बात है, मैं लिनक्स का उपयोग नहीं कर सकता - मैं इन मशीनों के नियंत्रण में नहीं हूं।

किसी भी विचार को मैन्युअल रूप से निष्पादित एसएसएच क्यों काम करता है, लेकिन स्क्रिप्ट नहीं है?

धन्यवाद फिल

+0

रूबी आवश्यक है, क्योंकि पावरहेल स्क्रिप्ट की तरह कुछ शायद बेहतर काम करेगा, यह इस तरह के व्यवस्थापक कार्य – Egryan

उत्तर

2

मैं इसे जिज्ञासा में बाहर की कोशिश की और दो मुद्दों पाया:

  1. होस्ट अपरिभाषित है, यह host होना चाहिए क्योंकि इस चर ब्लॉक में पारित किया जा रहा है।
  2. एसएसएच.स्टार्ट मानकों को STRING वर्ग होने की अपेक्षा करता है, इसलिए नीचे दिखाए गए अनुसार .to_s जोड़ें।

इसके अलावा, मैंने इसे do...end का उपयोग करने के बेवकूफ रूबी पैटर्न पर स्विच किया जब एक ब्लॉक पिछले 1 लाइन तक फैली हुई थी।

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 

मैंने प्राइ में इसका परीक्षण किया और अब यह काम कर रहा है। आशा है कि ये आपकी मदद करेगा।

+1

एलओएल के लिए डिज़ाइन किया गया है! मेरे पास उस कोड में HOST चर था और जब मैंने चिपकाया था तो हटा दिया गया था। तो यह एक सर्वर पर और अधिक से एसएसएचइंग था :) –

+1

मैं शर्त लगाऊंगा कि एक HOST बहुत अच्छी तरह से पुनरारंभ किया गया था :) – ZPH