[PYTHON] Führen Sie einen Hintergrundjob mit Stoff aus

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

Führen Sie einen Hintergrundjob mit Stoff aus
Führen Sie Aufgaben im Hintergrund auf dem Server aus, an den Sie gesendet haben
Stellen Sie env.hosts dynamisch mit Stoff ein
Führen Sie automatisierte Jobs in Python aus
Führen Sie Shell-Befehle in Python aus
Führen Sie Python unittest parallel aus
Führen Sie Amazon Linux 2 in VirtualBox aus
Führen Sie ein mehrzeiliges Skript in einem PDB aus
Führen Sie Eclipse in einer Docker-Umgebung (noVNC) aus.
Lassen Sie uns "Python -m Antigravitation" in Python ausführen
Führen Sie den Shell-Befehl / Python in R aus
Führen Sie unittest in Python aus (für Anfänger)
So führen Sie TensorFlow 1.0-Code in 2.0 aus
Führen Sie einen einfachen Algorithmus in Python aus
[Linux] Wer ist der Hintergrundjob? ??