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