【问题标题】:How to reload/restart pm2 with flighplan and be aware of a symlink directory?如何使用飞行计划重新加载/重新启动 pm2 并注意符号链接目录?
【发布时间】:2016-10-20 09:15:43
【问题描述】:

我正在使用flighplan 部署由Node.js 构建的我的Web 服务

我的部署脚本将新版本上传到名称中包含时间戳或一些随机字符的新目录。我将所有版本都保存在我的服务器中,因此我可以通过更改任何特定版本的链接轻松回滚并进行零停机部署。

主目录,以服务名称命名,它只是一个符号链接,上传后会更改为新版本的目录。

ln -snf ~/tmpDir ~/appName

我的问题是当pm2 重新启动我的服务器时,它使用以前版本的原始路径,它没有与符号链接绑定,而是按照链接指向链接指向的新目录。

有没有办法重新启动或重新加载pm2 并让它知道那个符号链接?

【问题讨论】:

  • 我认为 PM2 没有针对该问题的 API。
  • 更改符号链接后如何重启服务?
  • PM2本身没有revert命令吗?为什么要保留这些带时间戳的文件夹?

标签: node.js deployment server symlink pm2


【解决方案1】:

简答 - 您不应在更改的符号链接中运行 pm2。 pm2 将始终选择符号链接指向的旧路径,除非您使用 pm2 kill 命令。

解决方案 - 创建一个新目录并将其设为 smylink 和您的代码目录(mohmal-144 等)的父目录。为了便于理解,我们称之为部署。

现在你应该有以下结构 /home/部署 /home/deploy/mohmal -> home/deploy/mohmal-144。

如果您使用的是 pm2,则应使用生态系统.json(用于启动应用程序的 pm2 配置)文件。尽管您可以将此文件命名为任何您想要的名称。为了便于理解,我们将这个文件称为生态系统.json 文件。

在这个 ecossystem.json 文件中,在应用程序部分中,添加 cwd 目录,并且 cwd 应该指向符号链接的路径(而不是它指向的符号链接的路径)。请参见下面的示例。

{
  "apps": [
    {
      "name": "mohmal",
      "script": "src/bin/server.js",
      "exec_mode": "cluster",
      "instances" : "0",
      "cwd": "/home/deploy/mohmal",
      "error_file": "/var/log/mohmal/error.log",
      "out_file" : "/var/log/mohmal/out.log",
      "merge_logs": true
    }
  ]
}

将此文件放在本例中名为 deploy 的父目录中。

现在仅从该目录运行/使用 pm2 start、pm2 restart 命令。 如果您已经在系统中运行 pm2,只需运行一次 pm2 kill 即可清除旧进程。

然后使用建议的更改,您将永远不必 pm2 杀死进程。 对符号链接的更改也会反映出来。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-28
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 2013-07-14
相关资源
最近更新 更多