Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pm2 start app.js is exiting after 15 restarts

npm start will start my app just fine but when I do:

pm2 start app.js

I get:

[PM2] Spawning PM2 daemon
[PM2] PM2 Successfully daemonized
[PM2] Process app.js launched
┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────────────┬──────────┐
│ App name │ id │ mode │ pid  │ status │ restart │ uptime │ memory      │ watching │
├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────────────┼──────────┤
│ app      │ 0  │ fork │ 4681 │ online │ 0       │ 0s     │ 11.508 MB   │ disabled │
└──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────────────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app

in the logs I get:

[PM2] Starting streaming logs for [all] process
PM2: 2015-06-04 17:12:37: App name:app id:0 exited with code 0
PM2: 2015-06-04 17:12:37: Starting execution sequence in -fork mode- for app name:app id:0
PM2: 2015-06-04 17:12:37: App name:app id:0 online
PM2: 2015-06-04 17:12:37: App name:app id:0 exited with code 0
PM2: 2015-06-04 17:12:37: Starting execution sequence in -fork mode- for app name:app id:0
PM2: 2015-06-04 17:12:37: App name:app id:0 online
PM2: 2015-06-04 17:12:37: App name:app id:0 exited with code 0
PM2: 2015-06-04 17:12:37: Starting execution sequence in -fork mode- for app name:app id:0
PM2: 2015-06-04 17:12:37: App name:app id:0 online
PM2: 2015-06-04 17:12:38: App name:app id:0 exited with code 0
PM2: 2015-06-04 17:12:38: Starting execution sequence in -fork mode- for app name:app id:0
PM2: 2015-06-04 17:12:38: App name:app id:0 online
PM2: 2015-06-04 17:12:38: App name:app id:0 exited with code 0
PM2: 2015-06-04 17:12:38: Starting execution sequence in -fork mode- for app name:app id:0
PM2: 2015-06-04 17:12:38: App name:app id:0 online
PM2: 2015-06-04 17:12:39: App name:app id:0 exited with code 0
PM2: 2015-06-04 17:12:39: Starting execution sequence in -fork mode- for app name:app id:0
PM2: 2015-06-04 17:12:39: App name:app id:0 online
PM2: 2015-06-04 17:12:39: App name:app id:0 exited with code 0
PM2: 2015-06-04 17:12:39: Script /home/user/app/app.js had too many unstable restarts (15). Stopped. "errored"

here is my package.json:

  1 {
  2   "name": "app",
  3   "version": "0.0.0",
  4   "private": true,
  5   "scripts": {
  6     "start": "node ./bin/www"
  7   },
  8   "dependencies": {
  9     "body-parser": "~1.12.4",
 10     "cookie-parser": "~1.3.5",
 11     "debug": "~2.2.0",
 12     "express": "~4.12.4",
 13     "jade": "~1.9.2",
 14     "morgan": "~1.5.3",
 15     "serve-favicon": "~2.2.1",
 16     "stylus": "0.42.3"
 17   }
 18 }

node version: v0.10.38 pm2 version: 0.12.15

How do I even debug this? I am not sure why it's failing, is there some other place I need to check? My app.js file?

like image 607
cakes88 Avatar asked Jun 04 '15 17:06

cakes88


People also ask

Why does pm2 keep restarting?

PM2 allows to reload (auto fallback to restart if not in cluster) an application based on a memory limit/ Please note that the PM2 internal worker (which checks memory), starts every 30 seconds, so you may have to wait a bit before your process gets restarted automatically after reaching the memory threshold.

Will pm2 start your applications after system reboot?

When the server restarts, it will automatically restart PM2, which will then restart all the Node. js applications/processes it is managing. In this article, we will show you how to deploy PM2 as a service to reliably manage your Node.

Does pm2 auto restart on crash?

PM2 will keep your application forever alive, auto-restarting across crashes and machine restarts.


1 Answers

First, I'd try node ./bin/www and just make sure that works correctly.

I'm not sure what the "official" way to figure this out is but this should work:
You could put an uncaught exception handler into your code which simply writes to a file or do something else.

process.on('uncaughtException', function(err) {
    console.log('Caught exception: ' + err);
    throw err;
});

Edit: Based on your comment the reason you're having issues is because app.js is not the real entry point in your application. The real entry point is ./bin/www

So you need to tell PM2 to start that file rather than app.js like this:
pm2 start ./bin/www

like image 149
Randy Avatar answered Oct 21 '22 02:10

Randy