¿Cómo agrego tiempo de espera mientras uso fabric para el siguiente código?

1 minuto de lectura

avatar de usuario
kramer li

El código es el siguiente. Voy a explicar aquí.

Uso fabric para verificar el estado del punto de montaje para 2 servidores. el comando es

df -h /mnt

El problema de este comando es que puede colgarse allí para siempre, por lo que el código de estructura se colgará para siempre. Creo que algún mecanismo de tiempo de espera solucionará este problema. Pero no lo encontré en el documento de tela. ¿Hay alguna configuración sobre esto?

import fabric
from fabric import ThreadingGroup as Group

directory = '/mnt'
group = Group('server1', 'server2', user="someuser", connect_kwargs={'password':'somepassword'})
try:
    result = group.run("df -h %s" % directory)
except fabric.exceptions.GroupException as e:
    err = e
    pass

Opción n. ° 1: use el tiempo de espera de bash para detener el comando timeout 10 df -h

Opción #2: usa el run funciones timeout parámetro. el tiempo de espera se especifica en segundos, y un CommandTimeout se genera una excepción si se agota el tiempo de espera del comando.

Group.run

ejecuta Connection.run en todas las conexiones de los miembros.

y Connection.run

envuelve una implementación compatible con SSH de invoke.runners.Runner.run; ver su documentación para más detalles.

¿Ha sido útil esta solución?