首页 > 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年10月20日19:06 | #1

    As the admin of this web page is working, no hesitation very soon it will be famous, due
    to its feature contents.

  2. 2017年10月21日02:52 | #2

    Amazing issues here. I am very glad to see your article.

    Thanks so much and I’m having a look forward to touch you.

    Will you kindly drop me a e-mail?

  3. 2017年10月21日15:34 | #3

    I am really enjoying the theme/design of your website.

    Do you ever run into any browser compatibility issues?

    A couple of my blog audience have complained
    about my site not operating correctly in Explorer but looks great
    in Safari. Do you have any solutions to help fix this
    problem?

  4. 2017年10月21日16:59 | #4

    Its like you learn my mind! You appear to grasp so much
    about this, like you wrote the ebook in it or something.

    I think that you just could do with some percent to force
    the message house a bit, but instead of that, that is excellent blog.
    A fantastic read. I’ll definitely be back.

  5. 2017年10月21日17:13 | #5

    Very quickly this web site will be famous among all blogging and site-building
    viewers, due to it’s nice posts

  6. Avito321bam
    2017年10月21日21:27 | #6

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

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

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

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

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

    Гарантия:

    И, конечно же ничто не укрепляет доверие, как – Постоплата!!! Вперед денег не просим…

    Рады сотрудничеству!

    Заливы на балансы Авито
    ________

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

  7. 2017年10月22日10:56 | #8

    These are truly enormous ideas in about blogging.
    You have touched some nice points here. Any way keep up wrinting.

  8. 2017年10月22日15:08 | #9

    We are a bunch of volunteers and opening a new scheme in our community.
    Your website provided us with useful information to work on. You’ve performed an impressive activity and our entire community might be grateful to you.

  9. 2017年10月22日15:23 | #10

    wonderful post, very informative. I wonder why the other
    experts of this sector do not realize this. You should
    continue your writing. I’m confident, you’ve a great readers’ base already!

  10. 2017年10月22日22:02 | #11

    My brother recommended I might like this blog. He used to be entirely right.

    This put up truly made my day. You can not consider
    just how much time I had spent for this info! Thanks!

  11. 2017年10月23日03:49 | #12

    This is a great tip particularly to those new to the blogosphere.
    Brief but very accurate information… Thank you for sharing this
    one. A must read article!

  12. 2017年10月23日21:55 | #14

    This web site definitely has all of the info I wanted concerning this subject and didn’t know who to ask.

  13. 2017年10月24日06:23 | #15

    It’s going to be ending of mine day, except before finish
    I am reading this great article to improve my knowledge.

  14. 2017年10月24日07:06 | #16

    This is the right website for anybody who really wants to understand this
    topic. You understand a whole lot its almost hard to argue with you
    (not that I personally would want to…HaHa).
    You certainly put a fresh spin on a topic that has been written about
    for decades. Wonderful stuff, just great!

  15. 2017年10月25日20:54 | #17
  16. 2017年10月26日04:07 | #18

    Hello There. I found your blog using msn. This is an extremely well written article.
    I’ll make sure to bookmark it and come back to read more of your
    useful information. Thanks for the post. I will definitely
    comeback.

  17. 2017年10月26日04:29 | #19

    This page really has all the information and facts I needed about this
    subject and didn’t know who to ask.

  18. 2017年10月26日09:42 | #20

    Hi to every body, it’s my first go to see of this
    web site; this blog carries amazing and truly good
    information designed for visitors.

  19. 2017年10月26日11:28 | #21

    Touche. Solid arguments. Keep up the amazing effort.

  20. 2017年10月27日06:59 | #22

    Woah! I’m really loving the template/theme of this website.
    It’s simple, yet effective. A lot of times it’s tough to get that “perfect balance” between superb usability and visual appeal.
    I must say you have done a fantastic job with this. Additionally, the blog loads
    super quick for me on Safari. Outstanding Blog!

  21. 2017年10月27日12:35 | #23

    Excellent beat ! I would like to apprentice while you amend your
    web site, how can i subscribe for a blog site?
    The account aided me a acceptable deal. I had
    been a little bit acquainted of this your broadcast provided bright clear concept

  22. 2017年10月27日20:05 | #24

    Spot on with this write-up, I truly think this site needs a
    lot more attention. I’ll probably be back again to read more, thanks for
    the info!

  23. 2017年10月29日10:27 | #25

    You really make it seem so easy with your presentation but I find
    this topic to be really something that I think I would never understand.
    It seems too complicated and extremely broad for me.
    I am looking forward for your next post, I will try to get the hang of
    it!

  24. 2017年10月29日10:49 | #26

    I know this if off topic but I’m looking into starting my own blog and was
    curious what all is needed to get setup? I’m assuming having a blog like yours
    would cost a pretty penny? I’m not very internet savvy so I’m
    not 100% certain. Any recommendations or advice
    would be greatly appreciated. Kudos

  25. 2017年10月30日07:47 | #28

    I’m gone to inform my little brother, that he should also go to see this
    blog on regular basis to get updated from most up-to-date news update.

  26. 2017年10月30日17:20 | #29

    Definitely believe that which you stated.
    Your favorite reason seemed to be on the internet the easiest thing to be aware of.
    I say to you, I definitely get annoyed while people think about worries that they plainly
    don’t know about. You managed to hit the nail upon the top and defined out the whole thing without having side-effects , people can take a
    signal. Will probably be back to get more. Thanks

  27. 2017年10月31日18:17 | #30

    Attractive component to content. I simply stumbled upon your blog and in accession capital to claim that I acquire actually loved
    account your weblog posts. Anyway I will be subscribing for your augment and even I success you
    get right of entry to consistently rapidly.

  28. 2017年10月31日22:26 | #31

    An interesting discussion is definitely worth comment. I
    think that you need to publish more about this
    issue, it might not be a taboo matter but typically folks don’t
    speak about these subjects. To the next! All the best!!

  29. 2017年11月1日16:31 | #32

    Thanks for ones marvelous posting! I actually enjoyed reading it, you may
    be a great author.I will be sure to bookmark your blog and will
    eventually come back very soon. I want to encourage you to continue
    your great job, have a nice morning!

  30. 2017年11月1日22:59 | #33

    Spot on with this write-up, I seriously think this amazing site needs a lot more attention.
    I’ll probably be back again to read more,
    thanks for the information!

  31. 2017年11月2日19:16 | #34

    Great goods from you, man. I have understand
    your stuff previous to and you are just too magnificent.
    I actually like what you’ve acquired here, certainly like what you’re saying and the
    way in which you say it. You make it enjoyable and you still care for to keep it wise.
    I can’t wait to read far more from you. This is really a great web site.

  32. 2017年11月3日17:55 | #35

    Профессиональные юридические услуги с гарантией!

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

    Наше предложение – это:
    - полный спектр юридических и бухгалтерских услуг, которые способны облегчить ведение любого бизнеса;
    - коллектив опытных профессионалов в правовой, экономической, налоговой сфере;
    - всестороннее ведение бизнеса в первые годы после регистрации компании;
    - формирование полного пакета документов для осуществления процедуры регистрации бизнеса;
    - эффективное взаимодействие со структурами ФНС и внебюджетными фондами (ПФР, ФСС);
    - регистрация компаний «под ключ» и многое другое, что способно облегчить вашу жизнь.

    Полный спектр наших услуг и самые выгодные предложения сотрудничества по доступным ценам можно найти на нашем сайте firm-spb.com

  33. 2017年11月3日18:10 | #36

    This message is posted here using XRumer + XEvil 4.0
    XEvil 4.0 is a revolutionary application that can bypass almost any anti-botnet protection.
    Captcha Recognition Google (ReCaptcha-1, ReCaptcha-2), Facebook, Yandex, VKontakte, Captcha Com and over 8.4 million other types!
    You read this – it means it works! ;)
    Details on the official website of XEvil.Net, there is a free demo version.

  34. 2017年11月3日19:29 | #37

    Профессиональные юридические услуги с гарантией!

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

    Наше предложение – это:
    - полный спектр юридических и бухгалтерских услуг, которые способны облегчить ведение любого бизнеса;
    - коллектив опытных профессионалов в правовой, экономической, налоговой сфере;
    - всестороннее ведение бизнеса в первые годы после регистрации компании;
    - формирование полного пакета документов для осуществления процедуры регистрации бизнеса;
    - эффективное взаимодействие со структурами ФНС и внебюджетными фондами (ПФР, ФСС);
    - регистрация компаний «под ключ» и многое другое, что способно облегчить вашу жизнь.

    Полный спектр наших услуг и самые выгодные предложения сотрудничества по доступным ценам можно найти на нашем сайте firm-spb.com

  35. 2017年11月3日20:05 | #38

    Мmoguider.ru – актуальные гайды к классным браузерным игрушкам

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

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

    Лаконичные инструкции, которые предоставлены читателям в форме видео или текста, помогут вам за полчаса игры освоиться в неизвестном для себя игровом мире и начать играть чисто в своё удовольствие.

    Именно благодаря своей уникальной полезности, раздел сайта с гайдами пополняется активнее всего.

  36. 2017年11月3日21:57 | #39

    Мmoguider.ru – обзоры и гайды к новым онлайн играм

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

    Администрация названного ресурса ежедневно трудится над тем, дабы на главную страницу попадали лишь самые интересные игры. В раздел обзоров могут попасть свежие новинки мира онлайн-игр например https://mmoguider.ru/stuff/mmofps/star_conflict_kosmicheskij_shuter/2-1-0-1 , что способны заслужить внимания сообществе по мнению редактора.

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

    Именно благодаря огромной полезности, раздел с гайдами пополняется быстрее других.

  37. 2017年11月4日08:26 | #40

    Yes! Finally something about hello.

  38. 2017年11月5日05:23 | #41

    My partner and I stumbled over here from a different web page and thought I may as well check things out.

    I like what I see so now i’m following you. Look forward to looking over your web page repeatedly.

  39. 2017年11月7日02:51 | #42

    Hello, i think that i saw you visited my website thus i got here
    to go back the desire?.I am trying to find things to enhance my web site!I guess its adequate to make
    use of a few of your ideas!!

  40. 2017年11月7日23:22 | #43
  41. 2017年11月7日23:48 | #44
  42. 2017年11月7日23:50 | #45
  43. 2017年11月8日02:05 | #46
  44. 2017年11月8日02:08 | #47
  45. 2017年11月8日13:31 | #48

    Wow, wonderful blog layout! How long have you been blogging for?
    you made blogging look easy. The overall look of your site is wonderful, as well as the content!

  46. 2017年11月9日19:36 | #49

    Москва посуточная аренда квартир метро Новогиреево В квартире две спальни и большая гостиная, также наедаться комната и ванная комната. Сдается просторная и чистая однокомнатная жилище 40 м, комната 10 м. После качественногона долгий срок гражданам РФ без животных.
    посуточная аренда квартир Москва метро Новогиреево

评论分页
订阅评论
0+7= (必填)