2016-04-11 19 views
3

Ich benutze Paramiko (paramiko-expect) Tail-Funktionalität, um eine Remote-Log-Datei über ssh in Python2.7 zu beenden. Aber ich möchte, dass es nach einer bestimmten Zeit (etwa 12 Stunden oder so) aufhört. Ich möchte nicht Strg + C verwenden. Gibt es eine Möglichkeit, ein Timeout hinzuzufügen?Wie Timeout die Schwanzfunktion in Paramiko-erwarten?

Der Zweck besteht darin, eine Protokolldatei zu überwachen, die die Fehler enthält, die im Remote-System auftreten. Es wird eine E-Mail mit der Fehlerzeile aus der Protokolldatei gesendet. Es sollte nur für die spezifizierte gegebene Zeit überwachen.

Jede andere alternative Methode ist sehr willkommen!

Vielen Dank im Voraus!

Hier ist der Code für sie:

import paramiko 

from paramikoe import SSHClientInteraction 


def print_me(line_prefix, current_line): 

    if not current_line == '': 
     a = current_line 
     print a 
     #SEND MAIL CODE HERE 
     return current_line 

hostname = '1.1.1.1' 
username = 'root' 
password = 'abcd' 
prompt = '.*=# ' 

client = paramiko.SSHClient() 
client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
client.connect(hostname=hostname, username=username, password=password) 

interact = SSHClientInteraction(client,timeout=10,display=False) 

interact.send('tail -f /usr/elog/elog | grep -i --line-buffered severity') 
interact.tail(line_prefix = hostname+': ' , callback = print_me) 

Antwort

1

Ich bin der Autor von paramiko-erwarten :)

Leider gibt es keine elegante Lösung, die derzeit die Callback-Funktionalität, außer der Verwendung eine Ausnahme zu erhöhen was die Endlosschleife in der Heckfunktion unterbricht. Leider hat dies einige Nachteile, da die Verbindung nicht ordnungsgemäß geschlossen werden kann.

Ich ermutige Sie, ein Problem auf GitHub unter dem Repo zu erstellen, und ich werde sicher sein, eine gute Lösung für diese in der Zukunft zu betrachten, wie es zuvor kam.

Siehe Paramiko Expect - Tailing

Alles Gute
Fotis