我正在使用flighplan部署由Node.js
我的部署脚本将新版本上传到新目录,该目录的名称中包含时间戳或一些随机字符。我将所有版本保留在我的服务器中,这样我只需更改指向任何特定版本的链接即可轻松回滚,并实现零停机部署。
主目录,由服务名称命名,它只是一个符号链接,在上传后会更改为新版本的目录。
ln -snf ~/tmpDir ~/appName
我的问题是当pm2
重新启动我的服务器它使用前一版本的原始路径时,它不会与符号链接绑定,而是跟随指向链接所指向的新目录的链接。 / p>
有没有办法重新启动或重新加载pm2
并让它知道这个符号链接?
答案 0 :(得分:1)
简短回答 - 您不应该在更改的符号链接中运行pm2。 pm2将始终选择符号链接指向的旧路径,除非您使用pm2 kill命令。
解决方案 - 创建一个新目录,并将其作为smylink的父目录和您的代码目录(mohmal-144等)。为了便于理解,我们可以调用此部署。
现在你应该有以下结构 /家/部署 / home / deploy / mohmal - >家/部署/ mohmal-144。
如果您使用的是pm2,则应使用ecosystem.json(pm2 config for starting apps)文件。虽然您可以将此文件命名为您想要的任何内容。为了便于理解,我们将此文件称为ecosystem.json文件。
在这个ecossystem.json文件中,在apps部分中,添加cwd目录,cwd应该指向符号链接的路径(而不是指向它的符号链接的路径)。见下面的例子。
MyObject
将此文件放在此示例中名为deploy的父目录中。
现在运行/使用pm2 start,pm2仅从此目录重启命令。 如果你已经在系统中运行pm2,只需运行pm2 kill就可以清除旧进程。
然后使用建议的更改,你永远不会有pm2杀死进程。 对符号链接的更改也会反映出来。