shell - Daemonizando un ejecutable en ansible.
(4)
Estoy tratando de crear una tarea en ansible que ejecute un comando de shell para ejecutar un ejecutable en modo daemon usando &. Algo como seguir
-name: Start daemon
shell: myexeprogram arg1 arg2 &
Lo que estoy viendo es si sigo y la tarea vuelve inmediatamente y el proceso no se inicia. Si elimino & ansible tarea espera durante bastante tiempo sin volver.
Aprecie la sugerencia sobre la forma correcta de iniciar el programa en modo daemon a través de ansible. Tenga en cuenta que no quiero ejecutar esto como un servicio sino un proceso de fondo ad hoc basado en ciertas condiciones.
A partir de la breve descripción de lo que quiere lograr, parece que sería mejor para usted configurar su ejecutable como un servicio (utilizando Upstart o similar) y luego iniciarlo / detenerlo según sea necesario en función de las otras condiciones que lo requieran. estar corriendo (o no correr).
Tratar de ejecutar esto como un proceso de lo contrario implicará tener que capturar el PID o similar para que pueda intentar apagar el demonio que ha iniciado cuando lo necesita, con la misma cantidad de complejidad que la instalación de un archivo de configuración de init. y sin las sutilezas que los sistemas como Upstart le brindan los controles como iniciar / detener.
Cuando usted (o Ansible) cierre la sesión, la señal de salida se enviará al proceso en ejecución, aunque se ejecute en segundo plano.
Puedes usar nohup
para sortear eso.
- name: Start daemon
shell: nohup myexeprogram arg1 arg2 &
Encontré que la mejor manera, particularmente porque quería que se registrara la salida, era usar el paquete "daemonize". Si estás en CentOS / Redhat, como abajo. Probablemente hay también un paquete de apt para ello.
- name: yum install daemonize
yum:
name: daemonize
state: latest
- name: run in background, log errors and standout to file
shell: daemonize -e /var/log/myprocess.log -o /var/log/myprocess.log /opt/myscripts/myprocess.sh
La ejecución del programa con ''&'' no hace que el programa sea un demonio, solo se ejecuta en segundo plano. Para hacer un "verdadero demonio", su programa debe hacer los pasos descritos here .
Si su programa está escrito en C, puede llamar a la función daemon (), que lo hará por usted. Luego puede iniciar su programa incluso sin ''&'' al final y se ejecutará como un demonio.
La otra opción es llamar a su programa usando un daemon , que también debería hacer el trabajo.
- name: Start daemon
shell: daemon -- myexeprogram arg1 arg2