【发布时间】:2022-01-17 18:56:42
【问题描述】:
我有一个在实时服务器上运行的 nodejs 应用程序。我通过 SSH 访问服务器,在 VSCODE 的终端中使用以下命令启动一个新的节点进程。
nohup node filename.js &
大多数情况下,我可以在 VSCODE 终端中使用以下命令查看进程 ID。
netstat -lpn | grep 30001
此命令给出以下输出:
tcp6 0 0 :::30001 :::* LISTEN 21552/node
但是,有时它不会显示任何进程 id,如下面的输出所示:
tcp6 0 0 :::30001 :::* LISTEN -
如果进程由于某些技术错误而死掉,它应该会自动重新启动。为此,我每 5 分钟通过一个 cron 执行以下代码,这是有效的。
const find = require('find-process');
var spawn = require('child_process').spawn;
find("port", "30001")
.then((list)=> {
console.log("list::", list);
if (!list.length) {
spawn('node', [`${__dirname}/filename.js`], {
detached: true,
stdio: 'ignore'
}).unref();
}
}, function (err) {
console.log(err.stack || err);
});
以下是我的 cron
*/5 * * * * node path-to-js-file/crontab.js
我的问题:
- 为什么我在端口 30001 上的节点实例有时没有 pid,而其中包含的应用程序仍然可以访问?
-
kill -9将需要一个我没有如上所示的进程 ID。如何通过命令杀死这样的进程以便重启?
【问题讨论】:
标签: node.js linux server process