Ansible se bloquea al iniciar el servidor node.js

Me gustaría iniciar mi aplicación node.js en un libro de jugabilidad ansible. En este momento, la directiva final se ve así:

- name: start node server shell: chdir=${app_path} npm start& 

El problema es que ansible nunca regresa de esto. ¿Cómo puedo hacer que continúe?

Forever parece ser la forma más sencilla y sencilla de iniciar y desemantizar aplicaciones de Node.js. Actualmente, no hay un módulo de Ansible para siempre, pero aún puedes usar las siguientes reproducciones para instalar para siempre y ejecutar tu aplicación:

 - name: "Install forever (to run Node.js app)." npm: name=forever global=yes state=present - name: "Check list of Node.js apps running." command: forever list register: forever_list changed_when: false - name: "Start example Node.js app." command: forever start /path/to/app.js when: "forever_list.stdout.find('/path/to/app.js') == -1" 

Esto es completamente idempotente, y funciona muy bien para mí. Podría progtwigr un pequeño módulo para forever para Ansible para que haga esto por usted (como el módulo de service ), pero esto funciona por ahora.

Tengo un ejemplo completo de cómo iniciar una aplicación Node.js con el blog de Forever y Ansible on Server Check.in.

Usar Forever es la mejor solución para ejecutar la aplicación nodejs en segundo plano. La solución de @geerlingguy es excelente para ejecutar la aplicación una vez, pero si desea volver a implementar la aplicación, primero debe detener el servidor y luego volver a iniciarlo:

 - name: Get app process id shell: "ps aux | grep app.js | grep -v grep | awk '{print $2}'" register: process_id - name: Stop app process shell: kill -9 {{ item }} with_items: process_id.stdout_lines ignore_errors: True # Ignore error when no process running - name: Start application command: forever start path/to/app.js environment: NODE_ENV: production # Use this if you want to deploy the app in production 

Trate de usar nohup:

 - name: start node server shell: chdir=${app_path} nohup npm start & 

Sin embargo, un mejor enfoque podría ser tratar de usar para siempre, por lo que si la aplicación finaliza, se reiniciará automáticamente.

cuando cierras el shell, el proceso obtiene la señal SIGHUP (como kill -1). puede capturar la señal “SIGHUP” en su archivo app.js.

 process.on('SIGHUP', function() { logger.info("SIGHUP signal was interrupted"); }); 
    Intereting Posts