Nach dem Erstellen des Servers wollte ich die Anwendung zur Bestätigung starten und stoppen, das Protokoll zu diesem Zeitpunkt ausschneiden und sammeln, aber ich blieb ein wenig hängen, also machen Sie sich eine Notiz.
Da bei jedem Aufruf von run () ein Pseudo-Terminal erstellt wird, endet der Prozess beim Beenden von run (), indem es einfach im Hintergrund mit einer Methode wie "[Befehl] &" ausgeführt wird. Ich werde am Ende. Als ich es als Daemon mit "nohup" oder "disdown" ausführte und pty = False setzte, damit Fabric run () kein Pseudo-Terminal erstellte, funktionierte es wie erwartet.
Unten ist ein Beispiel.
#Lauf
fab test_tail_logfile -H localhost -u xxxxx -p xxxxx --port 2222
fabfile.py
from fabric.api import run, get, quiet
def kill_background_job(command):
with quiet():
run(u"pkill -f '%s'" % command)
def background_run(command, stdout):
run(u"nohup %s > %s 2>&1 &" % (command, stdout), pty=False)
def test_tail_logfile():
'''
Führen Sie eine andere Verarbeitung durch, während Sie das Protokoll im Hintergrund verfolgen.
Probe, um den Schwanz zu stoppen und Protokolle nach der Verarbeitung zu sammeln
'''
#Erstellen Sie eine Testprotokolldatei
run(u"echo '**********************' > work.log")
#Protokollschwanzstart
background_run(u"tail -f work.log", u"out.log")
#Versuchen Sie, etwas in das Protokoll zu schreiben
run("echo 'piyo piyo' >> work.log")
run("echo 'hoge' >> work.log")
#Stoppen Sie den Schwanz
kill_background_job(u"tail -f work.log")
#Überprüfen Sie, ob Sie sich anmelden können
run(u"cat %s" % u"out.log")
#Sammeln Sie Protokolle
get(r"out.log", u".\\log\\out.log")
Recommended Posts