首页 > linux > 多线程更新线上服务器

多线程更新线上服务器

2012年11月15日 eric 发表评论 阅读评论

好久没有更新过blog了,把自己写的一个多线程更新的脚本共享给大家,如果有什么疑问过着建议欢迎留言,以后我会把写的一个简单的通过页面更新线上服务的程序open 出来。

写这个脚本当然要说一下场景:
1,有一批web服务器,上面跑着相同的应用,目录结构一样。
2,更新时候注定要备份、删除缓存(不备份小心死人,删除缓存必要啊,不然新上的代码会不生效)
3,更新时必然我们要记录日志,是否连接服务器超时、备份时候成功、更新是否成功。

好了,有了结构,有了日志,有了备份,那么就不怕升级失败了。

先说代码为解决的一个问题,因为要开启多线程,所以日志记录的有点混乱,比如 ip 从 192.166.1.2 更新到 192.168.1.254 ,记录的日志可能第一行记录是 1.2 那么第二行可能记录 1.6 ,不过日志肯定每个服务的连接和返回日志都记录了。

脚本代码主要引入了 paramiko 类,有人说你为何不用 fabric,大哥我用了,他非要执行命令,结合 shell 来执行还是不错的,但是哥我测试想用单个脚本文件执行,我也做过测试,设置 env 环境变量后的确可以,但是比较慢,而且相当麻烦。所以哥我选择了 paramiko 用了一段时间,很稳定速度不错。

废话不多说,那么我们来看下代码:

1 #!/usr/bin/python2.6
  2 #-*- coding:utf-8 -*-
  3 import paramiko
  4 import commands
  5 import pexpect
  6 import  MySQLdb
  7 import logging
  8 import threading
  9 import Queue
 10 import csv
 11 import time
 12
 13 logging.basicConfig(level=logging.INFO,
 14                     format='%(asctime)s %(filename)s %(levelname)s %(message)s',
 15                     datefmt='%a,%d %b %Y %H %M:%s',
 16                     filename='paramiko.log',
 17                     filemode='w')
 18
 19 ## 创建 SSH 连接类
 20 class SSHClient(paramiko.SSHClient):
 21         def call(self, command, bufsize=-1):
 22                 chan = self._transport.open_session()
 23                 chan.exec_command(command)
 24                 stdin = chan.makefile('wb', bufsize)
 25                 stdout = chan.makefile('rb', bufsize)
 26                 stderr = chan.makefile_stderr('rb', bufsize)
 27 ## 获取命令放回状态代码
 28                 status = chan.recv_exit_status()
 29                 return stdin, stdout, stderr, status
 30
 31 ## 创建 rsync 连接类
 32 class rsyncThread():
 33    def __init__(self,host,passwd,code):
 34      self.host = host
 35      self.passwd = passwd
 36      self.code = code
 37    def run(self):
 38        ssh = pexpect.spawn("/usr/bin/rsync -a -c -v --delete %s -e '%s' %s:%s" % (self.code,'ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null',self.host,self.code),timeout=600)
 39        log=open('test.log','a')
 40        ssh.logfile=log
 41        i = ssh.expect(['(yes/no)','password:',pexpect.TIMEOUT,pexpect.EOF])
 42        if i == 0:
 43          ssh.sendline('yes')
 44          ssh.expect('password:')
 45          ssh.sendline(self.passwd)
 46        elif i == 1:
 47          ssh.sendline(self.passwd)
 48        elif i == 2:
 49          return False
 50        elif i == 3:
 51          return False
 52        ssh.expect(pexpect.EOF)
 53
 54 class mysqlimport():
 55     def __init__(self,host):
 56       self.host = host
 57     def run(self):
 58       imp = commands.getstatusoutput('mysql -h %s -uuser -p123456 -S /tmp/mysql.sock< /tmp/sqlquery.sql' % self.host)
 59       self.status = imp[0]
 60       self.msg = imp[1]
 61
 62 class sshcommand():
 63      def __init__(self,host,passwd):
 64        self.host = host
 65        self.passwd = passwd
 66      def run(self):
 67        sc = SSHClient()
 68        sc.load_system_host_keys()
 69        sc._policy = paramiko.AutoAddPolicy()
 70        try:
 71           sc.connect(self.host, 22, 'root', self.passwd ,timeout=5000)
 72           stdin, stdout, stderr, status = sc.call('/data/htdoc/tools/backup.sh')
 73
 74           sc.close()
 75           message = stdout.read()
 76           if status == 0:
 77             logging.info('%s  %s' % (self.host,message))
 78           elif status == 1:
 79             logging.info('%s  %s' % (self.host,message))
 80           elif status == 2:
 81             logging.info('%s  %s' % (self.host,message))
 82           elif status == 3:
 83             logging.info('%s  %s' % (self.host,message))
 84           else:
 85             logging.info('%s  %s' % (self.host,message))
 86        except:
 87           logging.info('%s Connection timed out' % self.host)
 88
 89 class worker(threading.Thread):
 90    def __init__(self,queue):
 91       threading.Thread.__init__(self)
 92       self.queue = queue
 93    def run(self):
 94       while True:
 95         line = self.queue.get()
 96         ipadd,passwd,code_path=line[0],line[1],line[2]
 97         #ipadd,passwd=line[0],line[1]
 98         #print ipadd
 99         sc = sshcommand(ipadd,passwd)
100         sc.run()
101         ry = rsyncThread(ipadd,passwd,code_path)
102         ry.run()
103#         myimport =  mysqlimport(ipadd)
104 #        myimport.run()
105 #        print myimport.status
106 #        status = sc.status
107 #        if status == 0:
108 #          logging.warning(message)
109         self.queue.task_done()
110
111
112 if __name__ == '__main__':
113 # 读取主机列表
114    reader = csv.reader(file('host.txt'))
115 #启用队列函数
116    queue = Queue.Queue()
117    out_queue = Queue.Queue()
118 #开启 5 个线程
119    for i in range(5):
120      t = worker(queue)
121      t.setDaemon(True)
122      t.start()
123 # 把主机列表放入队列
124    for line in reader:
125      queue.put(line)
126    queue.join()
127 #     print "Elapsed Time: %s" % (time.time() - start)
128

host.txt 内容为
# ip passwd web htdoc
192.168.1.2,password,/data/htdoc/

转载请注明:文章转载自:Eric's linux and nginx! (http://www.nginxs.com)
本文地址:http://www.nginxs.com/linux/497.html

分类: linux 标签: , ,
  1. 2017年9月11日07:32 | #1

    Лучшая площадка для бизнес-инвестирования

    Стать миллионером в нынешнее время можно за несколько лет, если вовремя придумать и вслед за этим реализовать нормальную бизнес-идею. И если с идеями у большинства молодых российских бизнесменов всё в порядке, то на моментах реализации и финансировании своих идей частенько начинаются проблемы.

    Инвестиционная площадка ruscash.su была придумана для того, дабы собирать в одном месте юных предпринимателей, опытных инвесторов и бизнес-менторов.

    Кроме этого на представленном портале вы найдете гору полезных публикаций, касающихся инвестиционного фона в РФ, например как получить деньги на стартап

  2. 2017年9月11日18:15 | #2

    I used to be able to find good info from your blog articles.

  3. 2017年9月11日20:08 | #3

    Как выбрать себе достаточно качественный первый велосипед!

    В наше время, когда улицы до краёв заполонили легковые авто, а ученые-климатологи во весь голос говорят о наступающем глобальном потеплении и негативном влиянии газов выхлопов на человеческое здоровье, второе рождение приобрел двухколесный транспорт.

    Но рядовому гражданину, что не имеет ни малейшего отношения к велосипедному спорту, часто трудно прийти в магазин и подобрать себе сносный первый велосипед.

    В данной публикации колеса для детских велосипедов купить мы попытаемся упростить такого рода задачу для вас, а поможет нам в этом продавец магазина osamarket.ru

  4. 2017年9月12日03:34 | #4

    cbd oil for dogs with cancer cbd oil for pain reviews [url=http://reginald9oconnor5.soup.io/post/631743763/CBD-hotel-Brisbane-Area-with-lots-to]cbd oil for sale georgia[/url] cbd oil for pain relief from ra

    reviews of cbd oil for anxiety cbd oil for pain relief where to buy reviews of cbd oil for anxiety cbd oil for anxiety in dogs

  5. 2017年9月12日14:14 | #5

    Write more, thats all I have to say. Literally, it
    seems as though you relied on the video to make your point.
    You clearly know what youre talking about, why waste your intelligence on just
    posting videos to your blog when you could be giving us something
    enlightening to read?

  6. 2017年9月12日19:11 | #6

    Самое лучшее место для бизнес-инвестирования

    Стать миллионером сейчас можно за пару лет, если вовремя придумать и сразу реализовать хорошую бизнес-идею. И если с идеями у кучи молодых индивидуальных предпринимателей всё в порядке, то на этапе реализации и финансировании задуманного практически всегда начинаются сложности.

    Новая инвестиционная площадка ruscash.su была придумана для того, дабы быстро собрать в одном месте начинающих бизнесменов, опытных инвесторов и бизнес-коучеров.

    Помимо этого на представленном сайте вы отыщете гору полезных материалов, касающихся инвестиционного фона в современной России, например вложенные деньги

  7. 2017年9月13日02:23 | #7

    Hi there! I’m at work surfing around your blog from my new iphone 3gs!

    Just wanted to say I love reading through your
    blog and look forward to all your posts! Keep up the fantastic work!

  8. 2017年9月13日03:59 | #8

    AlJayedCargo – наиболее выгодный логистический партнер для вашего торгового предприятия

    В наше время бизнес, что базируется на повторной продаже разных видов товаров — это чаще всего международный бизнес. Потому что большая доля производственных мощностей сейчас сосредоточена в Китайской Народной Республике и иных больших странах Востока, а основные потребители живут в странах Запада.

    Международная доставка разных товаров вносит огромный вклад в конечную стоимость продукции, кроме прочего таможенное оформление крупных партий товара заслуженно считается удивительно запутанной правовой процедурой, проводить которую самостоятельно большинство компаний просто не в силах.

    Если вы будете работать с компанией aljayedcargo.ae, то услуга грузоперевозки из оаэ в москву вдруг станет доступна вам 365 дней в календарном году и по самым низким расценкам.

  9. 2017年9月13日04:52 | #9

    I am actually thankful to the owner of this website who has shared this wonderful post at here.

  10. 2017年9月13日08:21 | #10

    I visited various web sites however the audio quality for audio songs existing at this web page is really wonderful.

  11. 2017年9月13日19:40 | #11

    Аренда авто – самый комфортный метод передвижения по Арабским Эмиратам

    Сегодня ОАЭ — это, без сомнения, самое богатое государство в ближневосточном регионе, что получило независимость лишь в тысяча девятьсот семьдесят первом году, но за несколько десятилетий ухитрилось занять одну из передовых позиций в мировой политике и экономике.

    Если вы приехали в это государство в маленький семейный тур или по проблемам, связанным с предпринимательской деятельностью, то лучший вид транспорта для вас — аренда автомобиля в дубаи , сделать это вы можете на портале rent.al-jc.com

    Там вы за относительно скромные денежные средства сможете взять на прокат нормальный автомобиль и пользоваться им нужное время.

  12. 2017年9月13日21:18 | #12
  13. 2017年9月13日21:37 | #13
  14. 2017年9月14日03:30 | #14
  15. 2017年9月14日03:56 | #15
  16. VladimirEif
    2017年9月14日06:45 | #16

    Oh Heavens. I don’t know what to do as I have tons of work to do next week month. Plus the university exams are nearing, it will be a torture. I am already freaking out maybe I should link to calm down a little bit. Hopefully it will all go well. Wish me luck.

  17. VladimirIxc
    2017年9月14日09:00 | #17

    Hey all! Recently I have been battling with a lot of challenges. Friends and doctors keep telling me I should consider taking medicine, so I may as well source and see how it goes. Problem is, I haven’t taken it for a while, and don’t wanna get back to it, we’ll see how it goes.

  18. 2017年9月14日12:39 | #18

    Excellent blog here! Also your site loads up very fast!
    What web host are you using? Can I get your affiliate link
    to your host? I wish my website loaded up as fast as yours lol

  19. 2017年9月14日14:10 | #19

    Здравствуйте господа[url=http://www.steklodel.by]![/url]
    Наша организация занимается свыше 10 лет продажей изделий из стекла в городе Минске.Вот основные виды подукции ,которую мы можем предложить вам:
    1)[url=http://www.steklodel.by]Стеклянные двери[/url] –это распашные,раздвижные двери и входные группы. Стеклянные двери преображают и визуально расширяют помещение. Оригинальный внешний вид и визуальная легкость дверей из стекла подойдут к любому интерьеру.
    2)[url=http://www.steklodel.by]Стеклянные козырьки[/url]-такие как козырьки на растяжках,козырьки в триплекс. Стеклянные козырьки приобретают по той причине, что они не только защищают входную дверь от погодных сюрпризов, но и элегантно смотрятся на любом фасаде.
    3)[url=http://www.steklodel.by]Стеклянные перегородки[/url] –они включают в себя офисные перегородки,перегородки для банков,душевые перегородки и перегородки в интерьер. Стеклянные перегородки становятся неотъемлемой частью современных офисов, торговых центров, развлекательных и спортивных учреждений. Перегородки из стекла придают прозрачность помещениям любой планировки.
    4)[url=http://www.steklodel.by]Стеклянные лестницы[/url] -стеклянные лестницы и лестничные ограждения из стекла, а также ограждения балконов и второго света — это прекрасное, современное решение, как для офисных и развлекательных центров, так и для дач или частных домов.
    [url=http://steklodel.by/]стеклянные перегородки в квартире цена[/url]
    [url=http://steklodel.by/]изделия из стекла на заказ минск[/url]
    [url=http://steklodel.by/]Стеклянные перегородки[/url]
    [url=http://steklodel.by/]ограждения стеклянные[/url]
    [url=http://steklodel.by/]двери стеклянные[/url]

  20. 2017年9月14日20:24 | #20

    Если на вашу долю случился долгий осенний вечерок и вы просто не в состоянии решить, как лучше скоротать время, то заходите на портал mmoguider.ru и вы сможете насладиться качественными online игрушками https://mmoguider.ru/stuff/mmorpg/panzar_forged_by_chaos_setevoj_onlajn_boevik_ot_tretego_lica/1-1-0-5 , которые были размещены в сети в текущем году.

    Доступный набор браузерных игрушек на нашем ресурсе удовлетворит все запросы любого, даже наиболее разборчивого человека!

    Помимо всего прочего, все игры доступны абсолютно бесплатно и не потребуют от вас установки клиента игры на PC: для погружения в процесс необходим лишь относительно современный браузер и широкополосное соединение с Интернетом.

  21. 2017年9月15日03:39 | #21
  22. NikitaXtm
    2017年9月15日09:56 | #22

    Oh Heavens. I don’t know what to do as I have loads of work to do next week summer. Plus the university exams are close, it will be a stretch. I am already being nervous maybe I should website to calm down a little bit. Hopefully it will all go well. Wish me luck.

  23. NikitaJld
    2017年9月15日12:41 | #23

    Hey all! Recently I have been fighting with a lot of Problems. Friends and doctors keep telling me I should consider taking meds, so I may as well link and see how it goes. Problem is, I haven’t taken it for a while, and don’t wanna get back to it, we’ll see how it goes.

  24. VasiliylOej
    2017年9月16日11:48 | #24

    Oh Lord. I don’t know what to do as I have loads of work to do next week month. Plus the university exams are coming, it will be a torture. I am already freaking out maybe I should clickhere to calm down a little bit. Hopefully it will all go well. Wish me luck.

  25. VasiliylPxm
    2017年9月16日17:20 | #25

    Oh Lord. I don’t know what to do as I have Lots of work to do next week month. Plus the university exams are getting, it will be a torture. I am already being nervous maybe I should [url=http://scottishcastlesassociation.com/tools/xanax-sweatshirt]Contact[/url] to calm down a little bit. Hopefully it will all go well. Wish me luck.

  26. 2017年9月17日14:24 | #26

    I am curious to find out what blog platform
    you have been utilizing? I’m having some minor security issues with my
    latest blog and I’d like to find something more safe.
    Do you have any solutions?

  27. 2017年9月18日07:58 | #28

    Acheter comprime http://inesrojo.com/swf/pharmacie/benzac.html pas cher Belgique.

  28. 2017年9月18日08:42 | #29
  29. Avito777oi
    2017年9月20日12:13 | #30

    Пополение баланса Авито (Avito) за 50% | Телеграмм @a1garant

    Приветствую вас, дорогие друзья!

    Рады предоставить Всем вам сервис по пополнению баланса на действующие активные аккаунты Avito (а также, абсолютно новые). Если Вам необходимы определенные балансы – пишите, будем решать. Потратить можно на турбо продажи, любые платные услуги Авито (Avito).

    Аккаунты не Брут. Живут долго.

    Процент пополнения в нашу сторону и стоимость готовых аккаунтов: 50% от баланса на аккаунте.
    Если нужен залив на ваш аккаунт, в этом случае требуются логин и пароль Вашего акка для доступа к форме оплаты, пополнения баланса.
    Для постоянных клиентов гибкая система бонусов и скидок!
    Гарантия:

    И, конечно же ничто не укрепляет доверие, как – Постоплата!!! Вперед денег не просим… А также, гасим Штрафы ГИБДД за 65% …

    Оплата:
    ЯндексДеньги, Webmoney (профессиональные счета)
    Рады сотрудничеству!

    Залив Авито канал Телеграмм @t.me/avito50
    ________

    акции авито
    одежда +на мальчика пакетом +на авито
    авито вакансии
    гироскутеры со скидкой авито
    баланс борд авито

  30. 2017年9月20日21:41 | #31

    Hi, after reading this amazing paragraph i am also cheerful to share my knowledge here
    with mates.

  31. 2017年9月21日02:04 | #32

    Remarkable issues here. I’m very happy to peer your article.
    Thanks a lot and I am having a look ahead to touch you.
    Will you please drop me a e-mail?

  32. 2017年9月21日12:12 | #33

    What i do not realize is in reality how you’re no longer really a lot more neatly-favored than you
    may be right now. You are very intelligent. You recognize thus considerably with regards to this subject, produced me
    individually believe it from so many numerous angles. Its like
    men and women aren’t fascinated until it is one thing to accomplish with Lady gaga!
    Your individual stuffs outstanding. All the time handle
    it up!

  33. Avito777Memn
    2017年9月21日22:09 | #34

    [b]Пополение баланса Авито (Avito) за 50%[/b] | [b]Телеграмм @a1garant[/b]

    [b]Здравствуйте, дорогие друзья![/b]

    Рады будем предоставить Всем вам услуги по пополнению баланса на действующие активные аккаунты Avito (а также, совершенно новые). Если Вам нужны конкретные балансы – пишите, будем решать. Потратить можно на турбо продажи, любые платные услуги Авито (Avito).

    [b]Аккаунты не Брут. Живут долго.[/b]

    Процент пополнения в нашу сторону и стоимость готовых аккаунтов: [b]50% от баланса на аккаунте.[/b]
    Если необходим залив на ваш аккаунт, в этом случае требуются логин и пароль Вашего акка для доступа к форме оплаты, пополнения баланса.
    Для постоянных клиентов гибкая система бонусов и скидок!
    Гарантия:

    [b]И, конечно же ничто не укрепляет доверие, как – Постоплата!!![/b] Вперед денег не просим… [b]А также, гасим Штрафы ГИБДД за 65% …[/b]

    Оплата:
    ЯндексДеньги, Webmoney (профессиональные счета)
    Рады сотрудничеству!

    Залив Авито [b]канал Телеграмм @t.me/avito50 [/b]
    ________

    авито скачать бесплатно
    авито пакет вещей омск
    авито купить игрушки пакетом
    авито бесплатные объявления официальный
    турбо пакет авито со скидкой

  34. 2017年9月22日10:43 | #35

    What’s up mates, how is all, and what you desire to say about
    this article, in my view its genuinely awesome in favor of me.

  35. 2017年9月22日16:08 | #36

    I’ve been surfing on-line more than three hours as of late, but
    I never found any fascinating article like yours. It’s beautiful price sufficient
    for me. In my view, if all web owners and bloggers made good content material as you probably
    did, the web will likely be a lot more helpful than ever
    before.

  36. 2017年9月23日01:01 | #37

    Лучшая юридическая консультация в РФ

    Законы, которые сегодня работают в разных государствах земного шара, прорабатывались человечеством в течение многих десятков лет, в результате чего они неоднократно изменялись и подстраивались под условия времени и страны.

    В конечном итоге это привело к тому, что до конца разобраться в хитросплетениях действующего отечественного законодательства обычные граждане не в состоянии, и приходится изучать материал открытие ооо и обращаться к дипломированным юристам.

    Реальная судебная практика показывает нам, что даже обычному россиянину частенько необходима помощь хорошего адвоката, а степень широты рамки текущего законодательства как-раз определяется квалификацией юриста. Вот лишь только парочка жизненных ситуаций, когда вам может быть нужен юрист от фирмы smoladvocat.ru:

    Оформление всех сделок с недвижимым имуществом — это крайне сложная юридическая процедура, что нуждается в сопровождении опытного юриста. Последний должен проверить юридическую чистоту жилья и корректность оформления договора.

  37. 2017年9月23日03:26 | #38

    I am curious to find out what blog system you happen to be using?
    I’m having some small security problems with my latest site and I would like to find something
    more risk-free. Do you have any solutions?

评论分页
1 2 3 4 497
订阅评论
2+8= (必填)