2016-05-17 17 views
0

sshを使用して特定のLinuxサーバに定期的にログオンするスクリプトがあり、サーバの最大接続数が13であるため、パラメータmax_workersを設定します。バックグラウンドでジョブをスケジューリングすると、sshの最大接続数を超えているため、Linuxサーバーに接続できませんでした。私はmax_workerを制限して以来、なぜそれが起こったのか分かりません。以下のように簡略化されたコード:APSchedulerジョブは、max_worker番号を超過するとスケジューラに追加された後でも実行されます

import paramiko 
from apscheduler.schedulers.background import BackgroundScheduler 
from paramiko import SSHClient 

class SSH(object): 
    def __init__(self): 
     self.scheduler = BackgroundScheduler({'apscheduler.executors.default': {'class': 'apscheduler.executors.pool:ThreadPoolExecutor', 'max_workers': '10'}}) 
    def func(self, src='127.0.0.1', user='user', password='password'): 
     ssh = SSHClient() 
     ssh.load_system_host_keys() 
     ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
     try: 
      ssh.connect(src, 22, user, password, timeout=3) 
     except Exception as e: 
      print 'Failed to connect to %s' % src 
      sys.exit(1) 

    def schedule(self, arg): 
     for i in range(100): 
      self.scheduler.add_job(self.func, 'interval', 
           seconds=60), 
           misfire_grace_time=100000000000, 
           kwargs=dict(
            src=arg['source'], 
            user=arg['username'], 
            password=arg['password'], 

           )) 
      try: 
       if not self.scheduler.running: 
        self.scheduler.start() 
      except Exception as e: 
       print e 

if __name__ == '__main__': 
    ssh_client = SSH() 
    ssh_client.schedule(arg) 

答えて

0

私はあなたが何が起こっているかを確認するためにデバッグログ(DEBUGレベルのログモジュールを初期化)を有効に示唆しています。ほとんどの場合、ジョブは終了しますが、何らかの理由で接続が開いたままになります。あるいは、関数が終了したときに何かを印刷させる。

関連する問題