Windows Server 设定 eggjs 自启

Windows Server 总是感觉很心虚,有些程序相性不太好,一旦八字不合就要调试半天,若非单位有这使用 Windows Server 的传统,我是绝不用它作为主力系统。这不,今天又碰到一个 eggjs 写的转接口应用需要在 Windows Server 2012 做自启,不出所料又折腾半天。

半天时间,我试了很多种方案,比如 pm2-windows-startup,任务计划+node-cmd,无一例外失败了。其中只有 pm2-windows-service 竟然在折腾之下意外成功,这里记录一下关键点。

pm2 与 server.js

这里我以 pm2 启动 server.js 的方式启动 eggjs 群( 也是因为 npm 指令无效的无奈之举),server.js 内容如下。

const egg = require('egg')
const workers = Number(process.argv[2] || require('os').cpus().length);
egg.startCluster({
    workers,
    baseDir: __dirname,
});

然后为了设定 eggjs 的环境变量,编写 pm2.json,设定环境变量为 prod,内容如下。这里script 我写了绝对路径也是以防有什么问题,相对路径没尝试过。

{
  "name": "smkqrcode",
  "script": "d:\qrcode\server.js",
  "env": { "EGG_SERVER_ENV": "prod" }
}

然后使用 pm2 start pm2.json 启动 eggjs,并键入 pm2 save 保存当前操作,以便于重启恢复。

pm2-windows-service 安装

常规全局安装

npm i -g pm2-windows-service

然后 cmd 中键入 pm2-windows-service

? Perform environment setup (recommended)? Yes
? Set PM2_HOME? Yes
? PM2_HOME value (this path should be accessible to the service user and
should not contain any “user-context” variables [e.g. %APPDATA%]): c:\etc\.pm2\
? Set PM2_SERVICE_SCRIPTS (the list of start-up scripts for pm2)? No
? Set PM2_SERVICE_PM2_DIR (the location of the global pm2 to use with the service)? [recommended] Yes
? Specify the directory containing the pm2 version to be used by the
service C:\USERS\<USER>\APPDATA\ROAMING\NPM\node_modules\pm2\index.js

千万要注意 PM2_HOME 要设置成 C:\Users\<username>\.pm2

重启测试

然后重启测试一下看服务是否启动即可。成功的那刻,我也是留下了激动的泪水。🤥🤥🤥

发表评论

邮箱地址不会被公开。