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)