I know, why is supervisord doing that, I just don't know (yet), how to solve this issue. The problem is that supervisord expects a monitored process to remain in the foreground, i.e. do nod daemonize. However pm2 start <app.js> does just that - it goes into background upon successful execution. Then supervisord "thinks" that the process went out, and relaunches it. I guess it gives up after like 4 tries. You need to find a way to run pm2 (or maybe other Node.js manager) so that it stays in the foreground.