Après avoir construit le serveur, je voulais démarrer et arrêter l'application pour confirmation, couper le journal à ce moment-là et le collecter, mais je suis resté un peu bloqué, alors prenez note.
Puisqu'un pseudo terminal est créé à chaque fois que run () est appelé, le processus se termine lorsque run () est quitté en l'exécutant simplement en arrière-plan par une méthode telle que "[commande] &". Je vais finir. Quand je l'ai exécuté en tant que démon avec "nohup" ou "disdown" et que j'ai défini pty = False pour que fabric run () ne crée pas de pseudo terminal, cela a fonctionné comme prévu.
Voici un exemple.
#Courir
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():
    '''
Effectuer d'autres traitements tout en suivant le journal en arrière-plan,
Échantillon pour arrêter la queue et collecter les journaux après le traitement
    '''
    #Créer un fichier journal de test
    run(u"echo '**********************' > work.log")
    #Début de la queue du journal
    background_run(u"tail -f work.log", u"out.log")
    #Essayez d'écrire quelque chose dans le journal
    run("echo 'piyo piyo' >> work.log")
    run("echo 'hoge' >> work.log")
    #Arrêtez la queue
    kill_background_job(u"tail -f work.log")
    #Vérifiez si vous pouvez vous connecter
    run(u"cat %s" % u"out.log")
    #Collecter les journaux
    get(r"out.log", u".\\log\\out.log")
        Recommended Posts