Skip to content

Commit 71a035f

Browse files
rusthpclaude
andcommitted
fix(web): handle EADDRINUSE gracefully to stop PM2 restart loop
When turbo restarts but the child Node process is still holding port 5001, the new instance now exits with code 0 instead of throwing an unhandled error, breaking the infinite PM2 restart/crash cycle. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 7654995 commit 71a035f

15 files changed

Lines changed: 24 additions & 14 deletions

File tree

apps/admin/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "cmmv-blog-admin",
3-
"version": "0.0.139",
3+
"version": "0.0.140",
44
"private": true,
55
"description": "Blog admin package for CMMV",
66
"type": "module",

apps/api/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "cmmv-blog-api",
3-
"version": "0.0.139",
3+
"version": "0.0.140",
44
"private": true,
55
"description": "Blog API sample",
66
"dev": {

apps/web/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "cmmv-blog",
3-
"version": "0.0.139",
3+
"version": "0.0.140",
44
"private": true,
55
"description": "Blog package for CMMV",
66
"type": "module",

apps/web/server.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,16 @@ async function bootstrap() {
563563
server.keepAliveTimeout = 65000; // 65 seconds (slightly higher than default 60s)
564564
server.headersTimeout = 66000; // 66 seconds (must be > keepAliveTimeout)
565565

566+
server.on('error', (err: NodeJS.ErrnoException) => {
567+
if (err.code === 'EADDRINUSE') {
568+
console.warn(`[SSR] Port ${port} already in use — another instance is running. Exiting gracefully.`);
569+
process.exit(0);
570+
} else {
571+
console.error('[SSR] Server error:', err);
572+
process.exit(1);
573+
}
574+
});
575+
566576
// @ts-ignore
567577
serverInstance = server.listen(port, "0.0.0.0", () => {
568578
console.log(`🚀 SSR server running at http://localhost:${port}`);

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@cmmv/blog",
3-
"version": "0.1.138",
3+
"version": "0.1.139",
44
"description": "Blog plugin for CMMV",
55
"keywords": [
66
"cmmv",

packages/access-control/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@cmmv/access-control",
3-
"version": "0.1.138",
3+
"version": "0.1.139",
44
"description": "Access Control package for CMMV",
55
"scripts": {
66
"build": "tsup"

packages/affiliate/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@cmmv/affiliate",
3-
"version": "0.1.138",
3+
"version": "0.1.139",
44
"description": "Affiliate package for CMMV",
55
"scripts": {
66
"build": "tsup"

packages/ai-content/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@cmmv/ai-content",
3-
"version": "0.1.138",
3+
"version": "0.1.139",
44
"description": "AI Content package for CMMV",
55
"scripts": {
66
"build": "tsup"

packages/eslint-config/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@repo/eslint-config",
3-
"version": "0.0.138",
3+
"version": "0.0.139",
44
"main": "index.js",
55
"license": "MIT",
66
"dependencies": {

packages/newsletter/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@cmmv/newsletter",
3-
"version": "0.1.138",
3+
"version": "0.1.139",
44
"description": "Newsletter management package for CMMV",
55
"scripts": {
66
"build": "tsup index.ts admin/index.ts client/index.ts --format cjs,esm --dts"

0 commit comments

Comments
 (0)