希望这个问题的答案是针对 Apache 和 Node.js 的通用答案,而不是针对 Plesk 的答案(因为我知道你对 Plesk 特定问题的感受!)。
我最近决定在 Node.js 服务器应用中添加一些短信通知,以便在发现特定更新时收到通知。在做这件事时,我认为添加服务器启动和关闭通知也是一个好主意。这导致了一些不愉快的发现:
- 大约每 24 小时,我的服务器(不是整个服务器平台,只是这个 Node.js 服务器应用程序)就会在凌晨 3:30 到 4:30 之间无缘无故地重启。
- 每次重启之前都没有正常检测到关机,所以看起来 Node.js 应用程序被直接杀死了,而不是发送我所监听的 SIGINT 或 SIGTERM。
- 即使使用 (咳嗽) 控制面板,您可以在其中请求重新启动应用程序,但不会进行正常重新启动。Node.js 应用程序只是被毫不客气地杀死了。
经过一番调查,发现每 24 小时重启一次似乎是由 Apache 日志轮换触发的。为什么简单的日志轮换会导致这种情况,这又是另一个有待解决的谜团。
同时,我想知道是否有办法确保正常关闭,无论是因为 Apache 停止或关闭,还是因为按下了“重新启动应用程序”按钮。
我通过监视以下信号来寻找关机情况:
process.on('SIGINT', shutdown);
process.on('SIGTERM', shutdown);
process.on('SIGUSR2', shutdown); // Used by my dev tools
我应该检查其他信号吗?进程是否使用 SIGKILL 无情地关闭?如果是这样,我可以改变它吗,也许通过某种延迟来给正常关闭留出一些时间?