Mule vs ActiveMQ for Python

2024-04-28 21:29:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要管理几个服务器,网络服务,AppApplication server(Apache,Tomcat)并管理它们(开始停止,安装软件)。在

我想使用Python,因为C++对于任务任务似乎很复杂,而且效率不高。在不确定使用哪个中间件。ActiveMQ和Mule似乎是一个不错的选择,尽管它们是用Java编写的。我更了解ActiveMQ,对ESB知之甚少。在

有什么建议吗?Python有什么选择吗?在

我看到有豆茎,但太简单,太不灵活了。我需要一个信息系统来协调,再加上一个发送方式焦油gz文件到服务器(软件包)。在

我在Python中有一个消息传递解决方案。在


Tags: 中间件服务器软件serverapachejava建议效率
1条回答
网友
1楼 · 发布于 2024-04-28 21:29:18

在多个远程服务器上管理各种服务的python“脚本”示例:

下面是一个经过黑客攻击的脚本,可用于管理您有SSH访问权限的服务器上的各种服务。在

理想情况下,您希望ssh代理运行,或者您需要多次键入密码短语。在

对于需要在远程计算机上提升权限的命令,可以看到调用了“sudo”。这意味着您需要在每个远程计算机上修改sudoers文件,并添加如下条目(假设您的用户名==deploy):

Defaults:deploy !requiretty
Defaults:deploy !authenticate

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

前两行允许deploy用户运行sudo,而无需tty或重新键入密码,这意味着它可以直接在ssh上运行,而无需任何进一步的输入。下面是一个示例python命令,用于在远程上利用sudo

^{pr2}$

总之,这并不是对您的问题的“直接”回答,而是说明了您可以多么容易地使用python和其他一些技术来创建一个100%针对您的特定需求定制的系统管理工具。在

顺便说一句,如果有任何命令返回exit status>;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 user@host: for the SourceURLs (NO TRAILING SLASH)
RemoteUsers = [
        "deploy@ac10.example.com",
        "deploy@ac11.example.com",
        ]

###################################################################################################
# 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)

相关问题 更多 >