使用pm2和ansible

时间:2017-07-17 19:57:16

标签: node.js npm ansible pm2

我正在尝试通过ansible使用pm2启动节点程序。问题是pm2 start命令在ansible下不是幂等的。再次运行时会出错。

这是我的安莎游戏

- name: start the application
  become_user: ubuntu
  command: pm2 start app.js -i max
  tags: 
    - app

现在如果我第一次运行它然后它运行正常但是当我再次运行它然后我得到错误告诉我脚本已经在运行。

通过ansible正确解决此错误并正确处理pm2的方法是什么。

4 个答案:

答案 0 :(得分:2)

在开始编写脚本之前,您应该删除之前的内容,如下所示:

 - name: delete existing pm2 processes if running
   command: "pm2 delete {{ server_id }}"
   ignore_errors: True
   become: yes
   become_user: rw_user


 - name: start pm2 process
   command: 'pm2 start -x -i 4 --name "{{server_id}}" server.js'
   become: yes
   become_user: rw_user
   environment:
    NODE_ENV: "{{server_env}}"

答案 1 :(得分:0)

我会用

pm2 reload app.js -i max

它将允许您重新加载配置;-)

答案 2 :(得分:0)

我最终在此页面上重新运行剧本时,寻求针对start PM2的解决方案。我还希望PM2在服务器已经运行时重新加载它,并提取我可能已经部署的新代码。事实证明,PM2具有这样的接口:

- name: Start/reload server 
  command: '{{path_to_deployed_pm2}} startOrReload pm2.ecosystem.config.js'

startOrReload命令需要存在一个所谓的“生态系统”文件。有关更多详细信息,请参见文档:Ecosystem File

这对我来说是最小的pm2.ecosystem.config.js

module.exports = {
  apps : [{
    script: 'app.js',
    name: "My app"
  }],
};

答案 3 :(得分:0)

这里我们可以使用“注册”模块来执行有条件的重启/启动。

注册以下命令的输出:

shell: pm2 list | grep <app_name> | awk '{print $2}'
register: APP_STATUS
become: yes

并使用 APP_STATUS.stdout 进行有条件的启动和重启任务。这样我们就不需要 pm2 删除步骤了。