如何正常关闭在 Apache/CentOS/Plesk 上运行的 Node.js?

如何正常关闭在 Apache/CentOS/Plesk 上运行的 Node.js?

希望这个问题的答案是针对 Apache 和 Node.js 的通用答案,而不是针对 Plesk 的答案(因为我知道你对 Plesk 特定问题的感受!)。

我最近决定在 Node.js 服务器应用中添加一些短信通知,以便在发现特定更新时收到通知。在做这件事时,我认为添加服务器启动和关闭通知也是一个好主意。这导致了一些不愉快的发现:

  1. 大约每 24 小时,我的服务器(不是整个服务器平台,只是这个 Node.js 服务器应用程序)就会在凌晨 3:30 到 4:30 之间无缘无故地重启。
  2. 每次重启之前都没有正常检测到关机,所以看起来 Node.js 应用程序被直接杀死了,而不是发送我所监听的 SIGINT 或 SIGTERM。
  3. 即使使用 (咳嗽) 控制面板,您可以在其中请求重新启动应用程序,但不会进行正常重新启动。Node.js 应用程序只是被毫不客气地杀死了。

Node.js 重启应用按钮

经过一番调查,发现每 24 小时重启一次似乎是由 Apache 日志轮换触发的。为什么简单的日志轮换会导致这种情况,这又是另一个有待解决的谜团。

同时,我想知道是否有办法确保正常关闭,无论是因为 Apache 停止或关闭,还是因为按下了“重新启动应用程序”按钮。

我通过监视以下信号来寻找关机情况:

process.on('SIGINT', shutdown);
process.on('SIGTERM', shutdown);
process.on('SIGUSR2', shutdown); // Used by my dev tools

我应该检查其他信号吗?进程是否使用 SIGKILL 无情地关闭?如果是这样,我可以改变它吗,也许通过某种延迟来给正常关闭留出一些时间?

相关内容