pm2进程在复活时使用旧的系统环境变量

pm2 process using the old system Environment Variables on resurrection

我创建了一个节点应用程序,用于订阅 OPC-UA 服务器并将数据存储在我们的 s3 存储桶中。为此,我正在使用 node-opcua 模块。

我正在通过 RDP 在 Windows 服务器上工作,node-opcua 模块在 %LOCALAPPDATA%\Temp 下创建一些文件作为过程的一部分并使用它。我正在使用 pm2 到 运行 应用程序,它通过进程本身动态生成的 TMPTEMP 环境变量获取这些文件的路径。

当 Windows 服务器重新启动时,它会删除这些文件并更新新文件的位置。我已经有了 运行 pm2 save 并将 pm2 resurrect 命令放入批处理文件中,该批处理文件在 windows 启动时有一个快捷方式,以确保进程自动启动。

问题是 pm2 进程已恢复,但 node-opcua 进程 运行ning 到 pm2 仍然抛出错误 %LOCALAPPDATA%\Temp\{some_path} file not found。我手动 运行 pm2 restart 但还是没成功。

首先我是从 node-opcua 模块的问题中想到的,并考虑如何让它使用新的系统变量,但由于进程不断地创建和删除临时文件,所以没有这样做,所以我需要 pm2 使用新的系统变量,它在系统重启后具有更新的路径,并且即使在 pm2 restart.

之后也没有更新

因此,为了更新变量,我找到了两个解决方案:

  • 删除旧进程并启动一个新的 pm2 进程到 运行 该应用程序并将其放入批处理文件中,在服务器重新启动时调用
  • pm2 resurrect后添加pm2 restart {name} --update-env,系统变量会更新