Exécuter une tâche d'arrière-plan avec Fabric

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

Exécuter une tâche d'arrière-plan avec Fabric
Exécutez des tâches en arrière-plan sur le serveur sur lequel vous vous êtes connecté
Définir dynamiquement des hôtes d'environnement avec Fabric
Exécuter des tâches automatisées en Python
Exécuter des commandes shell en Python
Exécuter Python unittest en parallèle
Exécutez Amazon Linux 2 dans VirtualBox
Exécuter un script multiligne dans un PDB
Exécuter eclipse dans un environnement Docker (noVNC)
Lançons "python -m antigravity" en python
Exécutez la commande shell / Python dans R
Exécutez unittest en Python (pour les débutants)
Comment exécuter du code TensorFlow 1.0 en 2.0
Exécutez un algorithme simple en Python
[Linux] Qui est le travail d'arrière-plan! ??