我正在尝试通过ansible使用pm2启动节点程序。问题是pm2 start
命令在ansible下不是幂等的。再次运行时会出错。
这是我的安莎游戏
- name: start the application
become_user: ubuntu
command: pm2 start app.js -i max
tags:
- app
现在如果我第一次运行它然后它运行正常但是当我再次运行它然后我得到错误告诉我脚本已经在运行。
通过ansible正确解决此错误并正确处理pm2的方法是什么。
答案 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 删除步骤了。