pythonマルチスレッドレプリケーションファイル同期


最近1台の機械を通じて同時に複数のサーバーを管理することができることをしたいと思って、つまりマルチスレッド制御サーバー、sshを通じてapache、mysqlなどを管理することができて、そこで自分で1つのマルチスレッドの複製ファイルの同期をして、機能はとても完全ではありませんて、しかし基本的な機能は実現することができて、その他の管理も同様の道理で、みんなはどんな良い提案がありますご指導をお願いします.
 

  
  
  
  
  1. [root@localhost opt]# cat expect.sh  
  2. expect -c " 
  3.         set timeout 1200; 
  4.         spawn /usr/bin/scp -r $1 $4@$2:$3 
  5.         expect { 
  6.                 \"*yes/no*\" {send \"yes\r\"; exp_continue} 
  7.                 \"*password*\" {send \"$5\r\";} 
  8.         } 
  9. expect eof;" 

以上はshellスクリプトで、expectでscpレプリケーションパスワードの自動入力機能を実現できます.フォーマット:./expect.sh[同期ファイル][IP][リモートに格納されているディレクトリ][リモートホストユーザ名][パスワード]、以下pythonコード
 

  
  
  
  
  1. [root@localhost opt]# cat d.py  
  2. #-*- encoding=UTF-8 -*- 
  3. import time 
  4. import os 
  5. import sys 
  6. import threading as thread 
  7. class Thread1(thread.Thread): 
  8.     def __init__(self): 
  9.         thread.Thread.__init__(self) 
  10.         self.lock = thread.RLock() 
  11.         self.flag = True 
  12.         self.count = 0 
  13.     def run(self): 
  14.         print 'scp ' 
  15.         self.lock.acquire()  
  16.         os.system('sh expect.sh 1.txt 192.168.251.66 /home root redhat') 
  17.         self.lock.release() 
  18.         print ' ' 
  19.          
  20. class Thread2(thread.Thread): 
  21.     def __init__(self,event): 
  22.         thread.Thread.__init__(self) 
  23.         self.event = event 
  24.     def run(self): 
  25.         self.event.wait() 
  26.         os.system('./expect.sh 1.txt 192.168.251.67 /home root redhat') 
  27.         self.event.clear() 
  28.         print ' ' 
  29.  
  30. print ' ' 
  31. event = thread.Event() 
  32. test1 = Thread1() 
  33. test2 = Thread2(event) 
  34. test1.start() 
  35. test2.start() 
  36. test1.join() 
  37. event.set() 
  38. test2.join() 
  39. print ' ' 
  40. [root@localhost opt]# cat d.py  
  41. #-*- encoding=UTF-8 -*- 
  42. import time 
  43. import os 
  44. import sys 
  45. import threading as thread 
  46. class Thread1(thread.Thread): 
  47.     def __init__(self): 
  48.         thread.Thread.__init__(self) 
  49.         self.lock = thread.RLock() 
  50.         self.flag = True 
  51.         self.count = 0 
  52.     def run(self): 
  53.         print 'scp ' 
  54.         self.lock.acquire()  
  55.         os.system('sh expect.sh 1.txt 192.168.251.66 /home root redhat') 
  56.         self.lock.release() 
  57.         print ' ' 
  58.          
  59. class Thread2(thread.Thread): 
  60.     def __init__(self,event): 
  61.         thread.Thread.__init__(self) 
  62.         self.event = event 
  63.     def run(self): 
  64.         self.event.wait() 
  65.         os.system('./expect.sh 1.txt 192.168.251.67 /home root redhat') 
  66.         self.event.clear() 
  67.         print ' ' 
  68.  
  69. print ' ' 
  70. event = thread.Event() 
  71. test1 = Thread1() 
  72. test2 = Thread2(event) 
  73. test1.start() 
  74. test2.start() 
  75. test1.join() 
  76. event.set() 
  77. test2.join() 
  78. print ' ' 

以下はpythonスクリプトの実行です.
 

  
  
  
  
  1. [root@localhost opt]# python d.py  
  2.  
  3. scp  
  4. spawn /usr/bin/scp -r 1.txt [email protected]:/home 
  5. [email protected]'s password:  
  6. 1.txt                                         100%    0     0.0KB/s   00:00     
  7.  
  8. spawn /usr/bin/scp -r 1.txt [email protected]:/home 
  9. [email protected]'s password:  
  10. 1.txt                                         100%    0     0.0KB/s   00:00     
  11.  
  12.  

以上の操作は簡単な同期操作を完成することができて、今度みんなにいくつか監視事件の自動同期スクリプトを書いて、ありがとうございます
 
本文は「遊造技術ブログ」のブログから、転載をお断りします!