如何使用飞行计划重新加载/重启 pm2 并注意符号链接目录?

far*_*oft 2 deployment symlink node.js pm2 server

我正在使用飞行计划来部署我构建的 Web 服务Node.js

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

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

ln -snf ~/tmpDir ~/appName
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我的问题是,当pm2重新启动我的服务器时,它使用以前版本的原始路径,它不与符号链接绑定并跟随链接指向该链接指向的新目录。

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

小智 6

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

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

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

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

在这个 ecossystem.json 文件中的 apps 部分,添加 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
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

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

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

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