2009-06-29 8 views
-1

複数のサーバ、ネットワークサービス、アプリケーションサーバ(Apache、Tomcat)を管理し、それらを管理する(stop stop、ソフトウェアをインストールする)必要があります。Mule対Python向けActiveMQ

私はPythonを使いたいと思っています.C++は複雑で、生産性が低いようです。どのミドルウェアを使用するかは不明です。 ActiveMQとMuleはJavaで書かれていますが、良い選択と思われます。私はActiveMQのほうがいいと分かりました。私はESBについてほとんど知りません。

アドバイスはありますか? Pythonのための任意のオプション?

私は、豆の茎があるのを見ましたが、あまりにも単純で柔軟性がありません。私はコーディネーションのためのメッセージシステムとtar.gzファイルをサーバ(ソフトウェアパッケージ)に送る方法が必要です。

私はそこに、Pythonでメッセージ処理ソリューションネイティブがありました。

+0

まず、あなたの目的の記述は、すなわち、サーバーを管理し、何が求める、すなわちメッセージングシステムは、非常によく一致していないようです。すでにソフトウェアの起動と停止、インストールを行うシステムがあります。なぜあなたがメッセージングシステムを必要とするのか、なぜそれほど重要でないのかは分かりません。 第2に、メッセージングシステムの要件を実際に説明していないため、誰でもそのトピックをガイドするのは難しいでしょう。 –

+0

目的を明確にしてください。本当にあなたが「やる」ことをしようとしています。 – gahooa

答えて

1

複数のリモートサーバ上の各種サービスを管理例パイソン「スクリプト」:

どのような次はあなたがへのSSHアクセスを持っているサーバ上で様々なサービスを管理するために使用することができます一緒にハッキングスクリプトです。

ssh-agentを実行したい場合や、パスフレーズを何度も入力するのが理想的です。

リモートマシンで昇格した権限が必要なコマンドの場合は、「sudo」が呼び出されていることがわかります。これは、(deploy ==ユーザー名を仮定して)あなたは、各リモートマシン上のsudoersファイルを変更し、次のようにエントリを追加する必要があることを意味します

Defaults:deploy !requiretty 
Defaults:deploy !authenticate 

deploy ALL=\ 
    /sbin/service httpd status,\ 
    /sbin/service httpd configtest,\ 
    /sbin/service httpd graceful 

最初の2行はなくても、sudoを実行するためのdeployユーザーを許可しますttyまたはパスワードを再入力する必要があります。これは、それ以上の入力をせずにsshを使ってまっすぐに実行できることを意味します。ここでは、リモートでsudoを活用する例のPythonコマンドです:とにかく

CommandResult = subprocess.call(('ssh', UH, 'sudo /sbin/service httpd graceful')) 

が、これは、あなたの質問に「ストレート」の答えではなく、あなたのpythonを使用することができますどのように簡単のイラストやカップルあなたの特定のニーズに合わせて100%のシステム管理ツールを作成することができます。

そして、次のスクリプトは、コマンドのいずれかが終了ステータス> 0を返した場合に「大声で明確に」指示するので、出力を自分で分析することができます。

これは、私が作業していたプロジェクトがロードバランサを使用し始めたときに一緒にハッキングされ、各サーバーですべてのコマンドを実行する必要がなくなりました。これを変更または拡張してrsyncを使用してファイルをデプロイするか、リモートサーバ上でホストしているスクリプトにアップデートを配備して "作業を行う"こともできます。

#!/usr/bin/python 


from optparse import OptionParser 
import subprocess 
import sys 

def die(sMessage): 
     print 
     print sMessage 
     print 
     sys.exit(2) 


################################################################################################### 
# Settings 

# The [email protected]: for the SourceURLs (NO TRAILING SLASH) 
RemoteUsers = [ 
     "[email protected]", 
     "[email protected]", 
     ] 

################################################################################################### 
# Global Variables 

# optparse.Parser instance 
Parser       = None 

# optparse.Values instance full of command line options 
Opt        = None 

# List of command line arguments 
Arg          = None 

################################################################################################### 
Parser = OptionParser(usage="%prog [options] [Command[, Subcommand]]") 


Parser.add_option("--interactive", 
     dest = "Interactive", 
     action = "store_true", 
     default = False, 
     help = "Ask before doing each operation." 
     ) 

# Parse command line 
Opt, Arg = Parser.parse_args() 

def HelpAndExit(): 
     print "This command is used to run commands on the application servers." 
     print 
     print "Usage:" 
     print " deploy-control [--interactive] Command" 
     print 
     print "Options:" 
     print " --interactive :: will ask before executing each operation" 
     print 
     print "Servers:" 
     for s in RemoteUsers: print " " + s 
     print 
     print "Web Server Commands:" 
     print " deploy-control httpd status" 
     print " deploy-control httpd configtest" 
     print " deploy-control httpd graceful" 
     print " deploy-control loadbalancer in" 
     print " deploy-control loadbalancer out" 
     print 
     print "App Server Commands:" 
     print " deploy-control 6x6server status" 
     print " deploy-control 6x6server stop" 
     print " deploy-control 6x6server start" 
     print " deploy-control 6x6server status" 
     print " deploy-control wb4server stop" 
     print " deploy-control wb4server start" 
     print " deploy-control wb4server restart" 
     print " deploy-control wb4server restart" 
     print 
     print "System Commands:" 
     print " deploy-control disk usage" 
     print " deploy-control uptime" 
     print 
     sys.exit(2) 

def YesNo(sPrompt): 
     while True: 
       s = raw_input(sPrompt) 
       if s in ('y', 'yes'): 
         return True 
       elif s in ('n', 'no'): 
         return False 
       else: 
         print "Invalid input!" 


# Implicitly verified below in if/else 
Command = tuple(Arg) 

if Command in (('help',),()): 
     HelpAndExit() 


ResultList = [] 
################################################################################################### 
for UH in RemoteUsers: 
     print "-"*80 
     print "Running %s command on: %s" % (Command, UH) 

     if Opt.Interactive and not YesNo("Do you want to run this command? "): 
       print "Skipping!" 
       print 
       continue 

     #---------------------------------------------------------------------------------------------- 
     if Command == ('httpd', 'configtest'): 
       CommandResult = subprocess.call(('ssh', UH, 'sudo /sbin/service httpd configtest')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('httpd', 'graceful'): 
       CommandResult = subprocess.call(('ssh', UH, 'sudo /sbin/service httpd graceful')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('httpd', 'status'): 
       CommandResult = subprocess.call(('ssh', UH, 'sudo /sbin/service httpd status')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('loadbalancer', 'in'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/loadbalancer-in')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('loadbalancer', 'out'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/loadbalancer-out')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('disk', 'usage'): 
       CommandResult = subprocess.call(('ssh', UH, 'df -h')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('uptime',): 
       CommandResult = subprocess.call(('ssh', UH, 'uptime')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('6x6server', 'status'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/6x6server-status')) 
       if CommandResult > 0: 
         print "Servers not running!!!" 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('6x6server', 'stop'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/6x6server-stop')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('6x6server', 'start'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/6x6server-start')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('6x6server', 'restart'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/6x6server-restart')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('wb4server', 'status'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/wb4server-status')) 
       if CommandResult > 0: 
         print "Servers not running!!!" 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('wb4server', 'stop'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/wb4server-stop')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('wb4server', 'start'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/wb4server-start')) 

     #---------------------------------------------------------------------------------------------- 
     elif Command == ('wb4server', 'restart'): 
       CommandResult = subprocess.call(('ssh', UH, 'bin-slave/wb4server-restart')) 

     #---------------------------------------------------------------------------------------------- 
     else: 
       print 
       print "#"*80 
       print 
       print "Error: invalid command" 
       print 
       HelpAndExit() 

     #---------------------------------------------------------------------------------------------- 
     ResultList.append(CommandResult) 
     print 


################################################################################################### 
if any(ResultList): 
     print "#"*80 
     print "#"*80 
     print "#"*80 
     print 
     print "ERRORS FOUND. SEE ABOVE" 
     print 
     sys.exit(0) 

else: 
     print "-"*80 
     print 
     print "Looks OK!" 
     print 
     sys.exit(1) 
+0

ありがとう、あなたが言ったように、これは私の質問に答えることはできません。しかし、あなたのコードは非常に面白いです。 – rtacconi

+0

Ok、ssh、Windowsはどうやって管理していますか? – rtacconi

関連する問題