[pyar] Ansible y Popen
Juan Carizza
juan.carizza en gmail.com
Vie Oct 21 18:32:23 ART 2016
Muchas gracias por la respuesta Marcos en cuanto llegue a algun resultado
escribo.
El vie., 21 oct. 2016 a las 15:46, Marcos Dione (<mdione en grulic.org.ar>)
escribió:
> On Fri, Oct 21, 2016 at 03:44:32PM +0000, Juan Carizza wrote:
> > def callback(mensaje):
> > subprocess.call("ansible-playbook unplaybook.yml", shell=True)
> >
> > El problema es que cuando el script de Ansible tira un sys.exit(0) mi
> > proceso muere y supervisor lo muestra como EXITED.
>
> es muy raro que ansible terminando mate tu proceso. subprocess
> debería estar llamando a fork(); esto crea un proceso hijo que ejecuta
> exec*(), y el exit() de ese proceso (ya no la función Python, que es la
> que levanta SystemExit, sino la de C, la que realemnte finaliza el
> proceso) no debería matar al padre, mucho menos con un shell de por
> medio. todo esto lo podés ver corriendo:
>
> strace -ff -o /tmp/foo python tu_scipt.py
>
> eso te va a dejar en /tmp varios arcivos, uno por proceso. si sabés
> de syscalls, vas a poder mas o menos seguir qué van haciendo cada uno de
> los procesos, que yo creería van a ser almenos tres: uno el intérprete
> python queejecuta tu script, otro el shell que estás pidiendo en el
> call() (a todo esto, en la forma que estás llamando a ansible no hace
> falta), y finalmente el de ansible.
>
> tiene que estar pasando otra cosa. una de eelas puede ser que el
> script está corriendo en otro environment y no encuentra
> ansible-playbook. pero en ese caso tampoco debería matar al padre.
>
> > - Probé haciendo un try catch de SystemExit no funcionó
> > - El API e Ansible no es muy entendible en la versión 2.0 y no encontré
> un
> > ejemplo claro. (Para ejecutar Ansible por código y no por un popen)
>
> eso no ando porque una vez que se hace el fork()+exec(), ya no es
> python el que corre.
>
> > ¿Cómo se que viene del script Ansible?
>
> podrías poner redirecciones en el comando:
>
> ansible-playbook unplaybook.yml &> /tmp/ansible.log
>
> y ver qué sale.
>
> > ¿De qué forma puedo evitar que el sys.exit de Ansible mate mi proceso?
> > ¿Puedo probar abriendo un proceso aparte con multithreading?
>
> un thread no sirve por varios motivos: a) si un thread llama a
> exit(), todos mueren y b) para poder ejecutar otra cosa tenes que usar
> exec(), y eso reemplaza todo el proceso, incluyendo los threads.
>
> --
> (Not so) Random fortune:
> Terrorism isn't a crime against people or property. It's a crime against
> our minds, using the death of innocents and destruction of property to
> make us fearful.
> -- Bruce Schneier
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20161021/7a27ca66/attachment.html>
Más información sobre la lista de distribución pyar