网站开发流程 知乎,学校网站建设具体分工,龙岩天宫山缆车开放时间,深圳广告设计公司网站nodejs的进程保活其实用PM2应该更好用些#xff0c;不过由于原理其实并不复杂#xff0c;我们可以自己手写一个服务来干这个工作。 假设我们有一个服务#xff0c;可以这样来定义下它的相关信息#xff1a;
const svcs[
{sid:apl,name不过由于原理其实并不复杂我们可以自己手写一个服务来干这个工作。 假设我们有一个服务可以这样来定义下它的相关信息
const svcs[
{sid:apl,name:application.js},
...
]我们是这样启动这个服务的
node application.js
服务启动时将进程id保存到这个pid文件中
const { pid } require(node:process);
...
fs.writeFileSync(pid/ssid.pid, pid);这样我们可以根据svcs的定义定时检查pids目录下的这些文件看它们的进程还在不不在的话执行启动服务命令拉起服务。
//keepalive.js
const fsrequire(fs);
const { spawn } require(child_process);
const gitBashPath C:\\Program Files\\Git\\bin\\bash.exe;
const svcPath/c/nodeproj/function pidIsRunning(svcpid) {try {process.kill(svcpid, 0); return true;} catch (e) { return false; }
}const svcs[{ id:apl,name:application.js }];svcs.forEach(svc{let svcpid fs.readFileSync(pid/svc[id].pid,utf8).substr(1);console.log(svc);console.log(svcpid);let svcalivepidIsRunning(svcpid);console.log(svcalive);if (!svcalive) {const child spawn(gitBashPath, [-c, node svcPathsvc[name] ],{ detached: true, stdio: ignore });child.unref();}});
process.exit(0);注意spawn带上{ detached: true, stdio: ‘ignore’ }参数是为了确保主进程退出后台服务仍然保持运行。 上面这个例程是一个一次性运行的脚本可以简单的改造成定时任务就从略了。