在Ansible Provision中永远运行永远不会触发或始终挂起

6 node.js forever ansible

在尝试forever在Ansible节点上启动进程时,我遇到了Anisble挂起的问题.我有一个非常简单的API服务器,我正在使用Ansible创建流浪和配置,如下所示:

---
- hosts: all
  sudo: yes

  roles:
    - Stouts.nodejs
    - Stouts.mongodb

  tasks:
    - name: Install Make Dependencies
      apt: name={{ item }} state=present
      with_items:
        - gcc
        - make
        - build-essential

    - name: Run NPM Update
      shell: /usr/bin/npm update

    - name: Create MongoDB Database Folder
      shell: /bin/mkdir -p /data/db
      notify:
        - mongodb restart

    - name: Generate Dummy Data
      command: /usr/bin/node /vagrant/dataGen.js

    - name: "Install forever (to run Node.js app)."
      npm: name=forever global=yes state=latest

    - name: "Check list of Node.js apps running."
      command: /usr/bin/forever list
      register: forever_list
      changed_when: false

    - name: "Start example Node.js app."
      command: /usr/bin/forever start /vagrant/server.js
      when: "forever_list.stdout.find('/vagrant/server.js') == -1"
Run Code Online (Sandbox Code Playgroud)

但即使Ansible表现得像一切都很好,也没有永远的过程开始.当我改变了几行删除when:的语句,并迫使它运行,Ansible只是手中,可能会在运行过程中永远(永远的,我相信),但不启动虚拟机,我可以与它进行交互.

我在网上基本上提到了两点; 我能找到的唯一 来源.

小智 0

正如评论中所述,变量内容需要包含在您的问题中,以便任何人提供正确的答案,但为了克服这个问题,我建议您可以这样做:

    - name: "Check list of Node.js apps running."
      command: /usr/bin/forever list|grep '/vagrant/server.js'|wc -l
      register: forever_list
      changed_when: false

    - name: "Start example Node.js app."
      command: /usr/bin/forever start /vagrant/server.js
      when: forever_list.stdout == "0"
Run Code Online (Sandbox Code Playgroud)

如果 JS 应用程序已经在运行,这应该会阻止 ansible 启动它。