2012-12-12 82 views
0

我正在運行可變數量的EC2實例(CentOS 64),它包含一個在生產模式下緩存一堆代碼的apache Web服務器。在許多EC2實例上批量重新啓動httpd

現在每次我做一些改變的代碼(通常在每週)我必須登錄到他們的實例中的每一個,做一個「蘇」,然後「服務的httpd重新啓動」

是否有一個如何自動執行此操作,以便我可以在其中一個連接到所有其他實例並重新啓動它的實例上運行單個命令?特別是當應用程序自己產生了20-30個實例時(特別是當我們獲得高流量時發生),真正花費時間。

謝謝!

+1

如果您將您的實例設置爲擁有root用戶的授權SSH密鑰,那麼您可以爲每個實例執行'ssh root @ instance service httpd restart'。這將是一個簡單的腳本循環遍歷所有實例的問題。 – nandhp

+0

如果你需要在很多服務器上定期做更多的事情,可能[Python Fabric](http://docs.fabfile.org/en/1.5/)腳本就是要看的東西。它充當shell命令之上的抽象層,易於使用(如果您對Python感到滿意)並且功能非常強大。 – bhell

+0

當我對每個實例ssh(使用pems)時,我也必須執行su並輸入root pwd,ec2-user無法重新啓動httpd。寧願選擇不涉及其他軟件的解決方案,但是感謝您的建議 –

回答

0

Dancer's shelldsh,是專門爲此提供的。不需要'腳本'。正如@ tix3所示,您應該也可以在這些機器上說服sudo(配置/etc/sudoers使用visudo)將它們配置爲接受您的重新啓動命令。

+0

看起來不像是「開箱即用」的,我必須連接到每臺機器,並安裝該lib和/或設置sudo :( –

+0

不,您需要做的是有一個ssh密鑰你推送到這些機器,然後你把主機放在一個組文件中,然後告訴dsh在這個組上執行一個操作,顯然任何解決方案都需要在啓動之前獲取一個主機列表,我的意思是,我們不預計DNS將被自動填充 並且dsh不是一個lib - 它不需要任何東西在端點上,它只是ssh –

+0

你能不能簡單地用sudo預先配置你的AMI嗎?我的意思是,這是如何在EC2上默認使用ubuntu –