Команды в блоке Paramiko из-за времени выполнения скрипта - PullRequest
0 голосов
/ 07 июня 2011

Привет, ребята, у меня есть три сервера, и я управляю им из SSH, поэтому я сделал этот скрипт для запуска моего регистрационного скрипта «Register.py», так что каждый день я включаю режим регистрации, поэтому проблема в том, как я могу войти в несколько соединений SSH без закрытиядругой

import paramiko
import os
ZI1={"ip":"192.168.1.2","pass":"Administrator"}
ZI2={"ip":"192.168.1.3","pass":"AdminTeachers"}
ZI3={"ip":"192.168.1.4","pass":"AdminStudents"}
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
for F1 in ZI1:
    ssh.connect(ZI1["ip"],username='root', password=ZI1["pass"])
    ssh.exec_command('./register.py -time 6') #6 hour so the script still working for 6 hours
    ssh.close()
for F2 in ZI2:
    ssh.connect(ZI2["ip"],username='root', password=ZI2["pass"])
    ssh.exec_command('./register.py -time 6')
    ssh.close()
for F3 in ZI3:
    ssh.connect(ZI2["ip"],username='root', password=ZI2["pass"])
    ssh.exec_command('./register.py -time 6')
    ssh.close()

так что мне нужно сделать, чтобы открыть 3 сессии без остановки сценария !!

Ответы [ 3 ]

1 голос
/ 07 июня 2011

То, как вы сейчас это делаете, блокирует, потому что вы не выходите из хостов в течение шести часов.

Многопроцессорная обработка:

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

nohup:

Другой метод (который не позволит вам увидеть возвращаемое значение скрипта через paramiko) должен использовать nohup для отсоединения скрипта от оболочки.Это поместит его в фоновый режим и позволит вам выйти из системы.Для этого используйте ...

    ssh.exec_command('nohup ./register.py -time 6 &') 

Опечатки:

Кстати, у вас были опечатки в последнем цикле ... ZI2 должно быть ZI3 в последнем цикле ..Более того, for -циклы не нужны ... Я исправил вашу самую последнюю итерацию ... Ссылается на @johnsyweb за то, что заметил больше опечаток ОП, чем я ...

ssh.connect(ZI3["ip"],username='root', password=ZI3["pass"])
ssh.exec_command('./register.py -time 6')   # <------------- missing s in ssh
ssh.close()
1 голос
/ 07 июня 2011

Я бы посоветовал посмотреть на Ткань .Это может помочь вам в работе с SSH-соединениями.

0 голосов
/ 07 июня 2011

Другой способ - использовать Thread, если вам нужно выполнить какое-либо действие, основанное на возврате Register.py

См. Пример:

import paramiko
import os
import sys
from threading import Thread

SERVER_LIST = [{"ip":"192.168.1.2","pass":"Administrator"},{"ip":"192.168.1.4","pass":"AdminStudents"},{"ip":"192.168.1.3","pass":"AdminTeachers"}]



class ExecuteRegister(Thread):
    def __init__ (self,options):
        Thread.__init__(self)
        self.options = options       
        self.ssh = paramiko.SSHClient()
        self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())



    def run(self):
        try:
           self.ssh.connect(self.options['ip'],username='root', password=self.options["pass"])
           self.ssh.exec_command('./register.py -time 6') #6 hour so the script still working for 6 hours
           self.ssh.close()
        except:
           print sys.exc_info()



for server in SERVER_LIST:
    Register = ExecuteRegister(server)
    Register.start()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...